Eat*_*ton 13 xcode optional swift
我试图在自定义类中声明两个属性作为选项 - String和Int.
我在MyClass中这样做:
var myString: String?
var myInt: Int?
Run Code Online (Sandbox Code Playgroud)
我可以解释它们如下:
required init?(coder aDecoder: NSCoder) {
myString = aDecoder.decodeObjectForKey("MyString") as? String
myInt = aDecoder.decodeIntegerForKey("MyInt")
}
Run Code Online (Sandbox Code Playgroud)
但是对它们进行编码会在Int行上产生错误:
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(myInt, forKey: "MyInt")
aCoder.encodeObject(myString, forKey: "MyString")
}
Run Code Online (Sandbox Code Playgroud)
当XCode提示我打开Int时,错误只会消失,如下所示:
aCoder.encodeInteger(myInt!, forKey: "MyInt")
Run Code Online (Sandbox Code Playgroud)
但这显然会导致崩溃.所以我的问题是,如何将Int作为一个可选项来对待,就像String一样?我错过了什么?
Sul*_*han 25
如果它可以是可选的,你也必须使用encodeObject它.
您正在使用Objective-C框架,而Objective-C nil仅允许对象(类/引用类型).一个整数不能nil在Objective-C中.
但是,如果您使用encodeObject,Swift会自动将您转换Int为NSNumber,即可nil.
另一种选择是完全跳过该值:
if let myIntValue = myInt {
aCoder.encodeInteger(myIntValue, forKey: "MyInt")
}
Run Code Online (Sandbox Code Playgroud)
并containsValueForKey(_:)在解码时使用.
| 归档时间: |
|
| 查看次数: |
4994 次 |
| 最近记录: |