我在测试Github的一些代码时发现了一个错误。
class Profile {
let text: String
let date: String
let id: String?
init?(data: NSDictionary?) {
if let text = data?.valueForKeyPath(Test.Text) as? String {
self.text = text
if let date = data?.valueForKeyPath(Test.Created) as? String {
self.date = date
id = data?.valueForKeyPath(Test.ID) as? String
}
}else{
return nil
}
}
struct Test {
static let Text = "text"
static let Created = "created"
static let ID = "id"
}
}
init?
行显示错误“constants self.data used before being initialized.”
我创建了一个类似的类,比如
class Context {
let words: String
init?(text:String?) {
if let words = text {
self.words = words
}else{
return nil
}
}
}
这次它显示“类实例的所有存储属性必须在从初始化程序返回 nil 之前初始化。”
对于第一个,有一个变通方法,我可以删除 else
block 并为每个属性提供一个空值来修复错误。但是,它会让我更改可变属性。
(我不希望它是可变的)
对于第二个例子,我只是在 return nil
这行之前插入 self.word = ""
也可以修复错误。
但我真的很想知道为什么这些类似的情况会显示不同的错误并实现 Swift 的逻辑,我该如何正确修复它?
谢谢你帮助我。
最佳答案
试试这个版本的代码。
代码 1:
class Profile {
var text: String = ""
var date: String = ""
var id: String? = ""
init?(data: NSDictionary?) {
if let text = data?.valueForKeyPath(Test.Text) as? String {
self.text = text
if let date = data?.valueForKeyPath(Test.Created) as? String {
self.date = date
id = data?.valueForKeyPath(Test.ID) as? String
}
}else{
return nil
}
}
struct Test {
static let Text = "text"
static let Created = "created"
static let ID = "id"
}
}
代码 2:
class Context {
var words: String = ""
init?(text:String?) {
if let words = text {
self.words = words
} else {
return nil
}
}
}
关于ios - 两个相似的类显示不同的初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898857/