欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

swift 中类和结构体的默认构造器-init方法

程序员文章站 2022-04-11 17:47:06
...

1. 开发环境说明

系统版本:macOS Catalina 10.15.4
Xcode版本: Version 11.5 (11E608c)
swift版本: Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53).

2. 空合运算符??

?? 被命名为空合运算符

let operateCH = txt2 ?? "nil"

txt2 表示为可选性,如果txt2为空,则使用默认字符串"nil"

3. 类自动生成的init方法

测试类中包括2个给定默认值的属生,和一个可选 String 属性txt2

class TestClass {
    var txt1: String = "aaa"
    var txt2: String?
    var int3: Int = 0
    
    func description()->String{
           return "txt1=\(txt1) txt2=\(txt2 ?? "nil") int3=\(int3)"
    }
}

调用测试类的初始化函数init代码如下:

var v1 = TestClass()
print("v1:"+v1.description())

运行后,输出结果如下:

v1:txt1=aaa txt2=nil int3=0

如果我们使用一个全参数的init函数时,编译器会报出错误告诉你并没有这个方法,也就是系统默认是不会生成带有参数的init方法.
swift 中类和结构体的默认构造器-init方法
结论:就是说一个类定义后,系统默认只会生成无参数的init方法.

4. 结构体自动生成的init方法

测试结构中包括2个给定默认值的属生,和一个可选 String 属性txt2, 跟上面的类完全一样.

struct TestStruct {
    var txt1: String = "aaa"
    var txt2: String?
    var int3: Int = 0
    
    func description()->String{
        return "txt1=\(txt1) txt2=\(txt2 ?? "nil") int3=\(int3)"
    }
}

调用测试类的初始化函数init代码如下:

var v2 = TestStruct()
print("v2:"+v2.description())

var v3 = TestStruct(txt1: "bbb", txt2: "ccc", int3: 111)
print("v3:"+v3.description())

var v4 = TestStruct(txt2:"jjj")
print("v4:"+v4.description())

var v5 = TestStruct(int3:919)
print("v5:"+v5.description())

运行后,输出结果如下:

v2:txt1=aaa txt2=nil int3=0
v3:txt1=bbb txt2=ccc int3=111
v4:txt1=aaa txt2=jjj int3=0
v5:txt1=aaa txt2=nil int3=919

结论:定义了一个结构体后,系统自动生成各种组合的init方法.

5. 养眼图片欣赏

swift 中类和结构体的默认构造器-init方法

相关标签: swift