您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页try try! try? And Realm

try try! try? And Realm

来源:化拓教育网
写这篇文章是因为在使用Realm的时候遇到的一些困惑,查资料弄明白了所以然,写下来备忘。

使用Realm的时候需要取一个Realm的实例,官方示例如下:

// Get the default Realm let realm = try! Realm()

//方法1 if let realm = try? Realm() { } //方法2 guard let realm = try? Realm() else { return }

但方法1在Swift3.0下报错如下,原因是Realm()不会返回一个Optional对象,只能在函数返回Optional对象时才能使用try?


2D2B2C01-F963-475D-B9C7-7F394D98703B.png

方法2,代码始终走到了else里面,百思不得其解。后来使用官方示例代码,程序直接Crash,Realm抛了一个异常,是因为的我Model定义有问题!我猜测在获取Realm实例的时候,Realm会遍历所有的Model,如果Model有问题,Realm就抛异常。

1. try

如果函数可能抛出异常,那么需要try catch组合来捕获异常,或者抛给下一层级的调用者

do { let result = try doSomething() } catch { // Here you know about the error // Feel free to handle to re-throw } func doSomeOtherThing() throws -> Void { // Not within a do-catch block. // Any errors will be re-thrown to callers. let result = try doSomething() }

2. try!

不是生就是死,要么函数执行成功,一旦抛出异常,程序直接Crash,简单粗暴

let result = try! doSomething() // if an error was thrown, CRASH!

3. try?

使用 if let + try? 组合,如果成功返回一个可选值,失败进入else,异常被忽略掉了,你不会知道到底是什么异常

`
if let result = try? doSomething() {
// doSomething succeeded, and result is unwrapped.
} else {
// Ouch, doSomething() threw an error.
}

`

使用guard关键字,抛出异常后进入else。但是异常被忽略掉了,这点和使用 if let 一样

guard let result = try? doSomething() else { // Ouch, doSomething() threw an error. } // doSomething succeeded, and result is unwrapped.

总结:光看书没用,必须写代码啊!在你看书的时候你认为你掌握了的知识点,其实到了写代码的时候才发现根本没有理解到。

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务