【问题标题】:Optional unwrapping for class properties SwiftSwift 类属性的可选解包
【发布时间】:2016-01-12 13:49:40
【问题描述】:

假设我有以下类定义:

class Request {
    let url: NSURL?

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

guard 语句不起作用,所以我必须执行以下操作:

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。

【问题讨论】:

    标签: swift optional


    【解决方案1】:

    你的第一个版本可以工作,你只是忘记为未包装的值给 guard 一个变量名(你使用 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
        }
    }
    

    【讨论】:

    • 如果您以后不使用变量名,Swift 是否不允许将变量名替换为 _
    • 是的,但正如你所说,它只有在你不需要该值时才有意义——我们需要它。
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多