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

本文深入解析Swift中的类和结构体的默认构造器机制。通过实例演示了空合运算符的使用,以及类与结构体在自动生成init方法上的区别。在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方法.

5. 养眼图片欣赏

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuanwenchao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值