Cra*_*Dev 17 oop nsobject ios swift
我为我的对象City创建了这个类
class City: NSObject {
var _name:String = ""
var name:String {
get {
return _name
}
set (newVal) {
_name = newVal
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我创建我的对象时,我做:
var city:City!
city.name = "London" //crash here
println("name city is\(city.name)");
Run Code Online (Sandbox Code Playgroud)
当我使用消息"致命错误:在解开可选值时意外发现nil"设置名称时崩溃
Ant*_*nio 29
这实际上不是一个答案(请参阅解决方案的其他答案,例如@ Greg和@ zelib),但尝试修复我在代码中看到的一些错误
无需创建计算+存储属性(除非您有理由):
class City: NSObject {
var name: String = ""
}
Run Code Online (Sandbox Code Playgroud)如果你继承NSObject,你会自动失去所有快速功能 - 避免它(除非你有理由)
class City {
var name: String = ""
}
Run Code Online (Sandbox Code Playgroud)您使用空字符串作为缺少值 - swift 为此提供了选项
class City {
var name: String?
}
Run Code Online (Sandbox Code Playgroud)替代3.,没有名字的城市没有多大意义,所以你可能希望每个实例都有一个名字.使用非可选属性和初始值设定项:
class City {
var name: String
init(name: String) {
self.name = name
}
}
Run Code Online (Sandbox Code Playgroud)避免隐式解包的选项(除非你有理由):
var city: City
Run Code Online (Sandbox Code Playgroud)Mit*_*gam 10
就像任何其他面向对象的编程语言一样,对象应该在访问之前进行初始化.
喜欢:
var city:City!
Run Code Online (Sandbox Code Playgroud)
这只是对象的参考.因此,这里不创建实际内存.您需要为City Class创建实际对象.
通过添加以下语句修复它:
city = City()
Run Code Online (Sandbox Code Playgroud)
您尚未初始化城市变量,当您尝试使用它时会崩溃.
在使用它之前首先初始化它:
city = City()
city.name = "London"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59760 次 |
| 最近记录: |