相关疑难解决方法(0)

我什么时候应该将可选值与nil进行比较?

通常,您需要编写如下代码:

if someOptional != nil {
    // do something with the unwrapped someOptional e.g.       
    someFunction(someOptional!)
}
Run Code Online (Sandbox Code Playgroud)

这似乎有点冗长,而且我听说使用!强制解包操作符可能是不安全的,最好避免使用.有没有更好的方法来处理这个?

optional ios swift swift2

43
推荐指数
1
解决办法
3万
查看次数

如何防止可能失败的属性的初始化

我的类有一个NSURL从字符串初始化的类型属性.该字符串在编译时已知.

要使类正常运行,必须在初始化(不是更晚)时将其设置为其预期值,因此将它定义为可选(隐式展开或其他方式)没有意义:

class TestClass: NSObject {

    private let myURL:NSURL

    ...
Run Code Online (Sandbox Code Playgroud)

假设NSURL(string:)(返回NSURL?)如果传递了编译时已知的有效URL字符串,则永远不会失败,我可以这样做:

    override init() {

        myURL = NSURL(string: "http://www.google.com")!

        super.init()
    }
Run Code Online (Sandbox Code Playgroud)

但是,我在某种程度上对强制解包感到不舒服,并希望以某种方式保护URL初始化.如果我试试这个:

    guard myURL = NSURL(string: "http://www.google.com") else {
        fatalError()
    }
Run Code Online (Sandbox Code Playgroud)

可选类型'NSURL?'的值 没有打开; 你的意思是用'!' 要么 '?'?

(注意:没有办法在上面的代码中添加!?修复错误的任何地方.条件解包只发生guard let... guard var...,并且myURL已经定义)

我明白为什么失败:即使成功调用NSURL(string:)的返回(有效的)NSURL 包裹内的可选NSURL?,所以我还需要以某种方式分配给前解开它myURL(这是不可选的,因此不转让兼容原样).

我可以通过使用中间变量解决这个问题:

    guard let theURL = NSURL(string: "http://www.google.com") else …
Run Code Online (Sandbox Code Playgroud)

optional swift

5
推荐指数
1
解决办法
2899
查看次数

标签 统计

optional ×2

swift ×2

ios ×1

swift2 ×1