可选展开类属性Swift

Jam*_*ott 2 optional swift

假设我有以下类定义:

class Request {
    let url: NSURL?

    init?(url: String) {
        guard let self.url = NSURL(string: url) else {
            self.url = nil
            return nil
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

守卫声明不起作用所以我必须做以下事情:

let url: NSURL?

init?(url: String) {
    guard let _ = NSURL(string: url) else {
        self.url = nil
        return nil
    }
    self.url = NSURL(string: url)!
}
Run Code Online (Sandbox Code Playgroud)

这感觉很长 - 是否有另一种更简单的方法来实现我想要实现的目标,即创建一个可用的初始化器,其唯一属性从NSURL获取值(返回一个可选项).如果NSURL值返回nil,则初始化程序将失败并返回nil.

aya*_*aio 7

你的第一个版本可以正常工作,你只是忘了为未包装的值提供一个变量名称(你使用了self.url,这就是错误):

class Request {
    let url: NSURL?

    init?(url: String) {
        guard let value = NSURL(string: url) else {
            self.url = nil
            return nil
        }
        self.url = value
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是的确如此,但正如你所说,只有你不需要价值才有意义 - 在这里我们需要它. (3认同)