可选展开类属性Swift

时间:2016-01-12 13:49:41

标签: swift optional

我们说我有以下课程定义:

class Request {
    let url: NSURL?

    init?(url: String) {
        guard let self.url = NSURL(string: url) else {
            self.url = nil
            return nil
        }
     }
}

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

let url: NSURL?

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

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

1 个答案:

答案 0 :(得分: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
    }
}