ios - 两个相似的类显示不同的初始化错误

标签 ios iphone swift class initialization

我在测试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/

相关文章:

ios - Xcode 9.2 存档成功但无法导出 IPA

ios - Swift:UIButton textLabel.text 值在 switch 语句中不可用

iphone - 删除了Team Provisioning Profile :* in the Provisioning Portal,怎么办?

ios - 如何限制在coredata中输入空值?

ios - 停止 UI 警报 Controller 返回到上一个 View

ios - 使用从弹出框选择器 View 中选择的字符串数组自动刷新表格 View

iphone - 已将iPhone AdMob集成到已启动的App中

ios - 启动后如何将调试器附加到 iOS 应用程序?

释放包含滚动 UITableView 的 View Controller 时,iPhone 应用程序崩溃

Android LayoutInflation 的 iOS/Swift 等价物