Swift可选的初始化
发布时间:2020-12-14 04:37:06  所属栏目:百科  来源:网络整理 
            导读:这是我的理解 var perhapsInt : Int? 这会自动设置为.None值.以下代码片段确认(没有编译器错误) class MyClass { var num1: Int = 0 var num2: Int? init(num1: Int) { self.num1 = num1 }}var newClass = MyClass(num1: 5)newClass.num1 // prints '5'newCl
                
                
                
            | 
                         
 这是我的理解 
  
  
  
var perhapsInt : Int? 这会自动设置为.None值.以下代码片段确认(没有编译器错误) class MyClass {
    var num1: Int = 0
    var num2: Int?
    init(num1: Int) {
        self.num1 = num1
    }
}
var newClass = MyClass(num1: 5)
newClass.num1 // prints '5'
newClass.num2 // prints 'nil' 
 我对可选的初始化过程的理解是否正确?如果是这样,当我将num2更改为let时,为什么这不起作用. 当使用let时,我期待选项的默认值为nil的相同行为.我在这里错过了什么吗? class MyClass {
    var num1: Int = 0
    let num2: Int?
    init(num1: Int) {
        self.num1 = num1
        // compiler error : return from initialiser without initialising all stored properties 
    }
}    
... 
 我的问题是,这两种情况如何都是真的.不应该是一个或另一个.可选值自动设置为.None或不是. 解决方法
 var num2的行为:Int?由Optionals糖引起的.它们是Swift中唯一具有隐式默认值(.None)的类型. 
  
  
        请注意,如果键入var num2:Int(不带?) – 编译器将抛出相同的错误,无论使用var与let. class MyClass {
    var num2: Int
    init() {
        // Return from initializer without initializing all stored properties
    }
} 
 因为let’值不能被覆盖(与vars相反),它们要求您显式设置其初始值: class MyClass {
    let num2: Int? = nil
}
// or this way
class MyClass {
    let num2: Int?
    init() {
        num2 = nil
    }
} 
 然而,这将导致无用的零常数. 您可以阅读有关存储属性here和here的初始化的更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
