swift 中类和结构体的默认构造器-init方法
程序员文章站
2022-04-11 17:47:06
...
swift 类和结构体的默认构造器
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方法.
结论:就是说一个类定义后,系统默认只会生成无参数的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方法.