【发布时间】:2016-02-22 03:50:34
【问题描述】:
显然,一个保护语句将创建一个新变量,该变量可能会影响同名属性。
例如,在这段代码中:
struct Foo{
let url : NSURL
init?(urlString: String){
guard let url = NSURL(string: urlString) else{
return nil
}
//self.url = url
}
}
只有取消最后一行的注释才能编译。否则编译器会抱怨你没有绑定 self.url。
这是错误还是功能?对我来说听起来很愚蠢,并迫使您编写重复的代码。
【问题讨论】:
-
这是一项功能。理想情况下,您不应该使用失败的初始化程序。添加它们主要是因为 Obj-C 兼容性。更好的设计是将
NSURL直接传递给初始化程序并在初始化之前处理解析。或者使用静态方法。 -
不只是
guard,您始终可以在本地范围内创建一个变量,以隐藏在外部范围内声明的变量或属性。 -
@Sulthan 将其作为答案,我会接受。
标签: swift cocoa initialization swift2