我们说我有以下课程定义:
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。
答案 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
}
}