Swift可选的初始化

Swift可选的初始化,第1张

概述这是我的理解 var perhapsInt : Int? 这会自动设置为.None值.以下代码片段确认(没有编译器错误) class MyClass { var num1: Int = 0 var num2: Int? init(num1: Int) { self.num1 = num1 }}var newClass = MyClass(nu 这是我的理解

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 wayclass MyClass {    let num2: Int?    init() {        num2 = nil    }}

然而,这将导致无用的零常数.

您可以阅读有关存储属性here和here的初始化的更多信息.

总结

以上是内存溢出为你收集整理的Swift可选的初始化全部内容,希望文章能够帮你解决Swift可选的初始化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存