iOS:创建对象 class 和 Swift
iOS: create an object class with Swift
我为我的对象 City
创建了这个 class
class City: NSObject {
var _name:String = ""
var name:String {
get {
return _name
}
set (newVal) {
_name = newVal
}
}
}
然后当我创建我的对象时:
var city:City!
city.name = "London" //crash here
println("name city is\(city.name)");
当我用消息 "fatal error: unexpectedly found nil while unwrapping an Optional value"
设置名称时崩溃
您还没有初始化 city 变量,当您尝试使用它时它崩溃了。
使用前先初始化:
city = City()
city.name = "London"
您收到错误消息是因为您没有初始化 city 变量,而只是隐式解包它而没有在任何阶段进行初始化。要初始化它,您必须使用以下代码
var city:City = City()
你必须调用init方法。所以你会这样做:
var city:City=City() //Calls init and creates an instance
city.name="foo"
如果您不定义 init 方法(您这样做总是一个好习惯),则会调用默认的 init 方法。
这实际上不是答案(解决方案请参阅其他答案,例如@Greg 和@zelib 的),而是尝试修复我在您的代码中看到的一些错误
不需要创建计算+存储属性(除非你有理由这样做):
class City: NSObject {
var name: String = ""
}
如果您从 NSObject
继承,您将自动失去所有 swift 功能 - 避免它(除非您有理由这样做)
class City {
var name: String = ""
}
您正在使用空字符串作为缺少值 - swift 为此提供 optionals
class City {
var name: String?
}
替代 3.,没有名称的城市没有多大意义,因此您可能希望每个实例都有一个名称。使用非可选 属性 和初始化器:
class City {
var name: String
init(name: String) {
self.name = name
}
}
避免隐式解包选项(除非你有理由这样做):
var city: City
就像任何其他面向对象的编程语言一样,对象应该在访问之前进行初始化。
喜欢:
var city:City
这只是对象的引用。因此,实际内存并未在此处创建。您需要为 City Class.
创建实际对象
通过添加以下语句修复它:
city = City()
我为我的对象 City
创建了这个 classclass City: NSObject {
var _name:String = ""
var name:String {
get {
return _name
}
set (newVal) {
_name = newVal
}
}
}
然后当我创建我的对象时:
var city:City!
city.name = "London" //crash here
println("name city is\(city.name)");
当我用消息 "fatal error: unexpectedly found nil while unwrapping an Optional value"
设置名称时崩溃您还没有初始化 city 变量,当您尝试使用它时它崩溃了。
使用前先初始化:
city = City()
city.name = "London"
您收到错误消息是因为您没有初始化 city 变量,而只是隐式解包它而没有在任何阶段进行初始化。要初始化它,您必须使用以下代码
var city:City = City()
你必须调用init方法。所以你会这样做:
var city:City=City() //Calls init and creates an instance
city.name="foo"
如果您不定义 init 方法(您这样做总是一个好习惯),则会调用默认的 init 方法。
这实际上不是答案(解决方案请参阅其他答案,例如@Greg 和@zelib 的),而是尝试修复我在您的代码中看到的一些错误
不需要创建计算+存储属性(除非你有理由这样做):
class City: NSObject { var name: String = "" }
如果您从
NSObject
继承,您将自动失去所有 swift 功能 - 避免它(除非您有理由这样做)class City { var name: String = "" }
您正在使用空字符串作为缺少值 - swift 为此提供 optionals
class City { var name: String? }
替代 3.,没有名称的城市没有多大意义,因此您可能希望每个实例都有一个名称。使用非可选 属性 和初始化器:
class City { var name: String init(name: String) { self.name = name } }
避免隐式解包选项(除非你有理由这样做):
var city: City
就像任何其他面向对象的编程语言一样,对象应该在访问之前进行初始化。
喜欢:
var city:City
这只是对象的引用。因此,实际内存并未在此处创建。您需要为 City Class.
创建实际对象通过添加以下语句修复它:
city = City()