服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - Swift中类与结构的初始化示例解析

Swift中类与结构的初始化示例解析

2022-07-27 10:15张英爱 Swift

这篇文章主要为大家介绍了Swift中类与结构的初始化解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

前言:通过学习与研究swift3.0的官方文档关于初始化这部分可以总结为一句话:类与结构是确保一个类型的实例可以使用之前,其所有存储属性都得到了正确的赋值。

一,结构的初始化

?
1
2
3
4
5
6
7
8
9
struct FirstStruct{
     let b:Int
     let c:Int
     init() {
        b = 2
        c = 3
     }
 }
 let fs = FirstStruct()

解析:这个结构中b,c这两个存储属性并未赋初值,而是在init初始化器(相当于Java中的构造函数)中赋初值。

二,结构的初始化

?
1
2
3
4
5
struct SecondStruct{
    let b:Int
    let c:Int
}
let ss = SecondStruct(b:2,c:3)

解析:结构中,编译器会自动生成memberwise的初始化器,因此在调用结构时必须传入初始化值。

三,结构中初始化错误示例

?
1
2
3
4
5
6
7
8
//struct ThirdStruct{
//    let b:Int
//    let c:Int
//    init() {
//        b = 0
//    }
//}
//let ts = ThirdStruct(c:3)

注意:结构中声明了初始化器,编译器将不会给我们添加memberwise的初始化器,(原理和Java的空构造函数一致)上面这个例子是不能通过编译的。

四,结构中init可以通过self关键字调用其他的init

?
1
2
3
4
5
6
7
8
9
10
11
12
struct FourthStruct{
     let b:Int
     let c:Int
     init() {
         self.init(b:2)
     }
     init(b:Int){
         c = 2
         self.b = b
     }
 }
 let fos = FourthStruct()

五,类初始化错误示例

?
1
2
3
4
5
6
//错误示例
//class SecondClass{
//    let b:Int
//    let c:Int
//}
//let sc = SecondClass(b:2,c:3)

解析:类里面也可以通过声明init初始化器,若不提供初始化器,编译器不会提供默认的初始化器

六,类的(Designated init)初始化器

?
1
2
3
4
5
6
7
8
9
10
11
class Parent2{
     var name:String
     var height:Int
     init(name:String,height:Int){
         self.name = name
         self.height = height
     }
 }
 let p2 = Parent2(name:"zs",height:168)
 p2.height
 p2.name

解析:没有特殊的修饰符的init就是专门的(Designated init)初始化器,主要的作用就是确保所有的存储属性得到初始化

七,Designated init

一般只有一个,可以有多个,根据你调用时赋值的不用而调用不同的初始化器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Parent3{
     var name:String
     var sex:String
     init(name:String,sex:String){
         self.name = name
         self.sex = sex
     }
     init(name:String){
         self.name = name
         sex = "男"
     }
 }
 let p3 = Parent3(name:"zs",sex:"女")
 let p4 = Parent3(name:"ls")
 p3.sex
 p4.sex

八,类的便利(convenience)初始化器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Parent3{
    var name:String
    var sex:String
    init(name:String,sex:String){
        self.name = name
        self.sex = sex
    }
    convenience init(name:String){
        self.init(name:name,sex:"男")
    }
    convenience init(){
        self.init(name:"zs")
    }
}
let p3 = Parent3(name:"zs")
let p4 = Parent3()
p3.sex
p4.sex

解析:通过在初始化器前声明convenience关键字可以声明一个便利初始化器,它的作用是方便创建对象时使用,但它必须直接或间接调用专门初始化器

九,子类的专门初始化器

子类的专门初始化器必须调用父类的专门初始化器,子类不能调用父类的便利初始化器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Parent4{
     var name:String
     var sex:String
     init(name:String,sex:String){
         self.name = name
         self.sex = sex
     }
     convenience init(name:String){
         self.init(name:name,sex:"男")
     }
 }
 //-----------------------------------------------
 class Child4:Parent4{
     var age:Int
     init(age:Int) {
         self.age = age
         //super.init(name: "ls")错误示例
         super.init(name: "zs",sex:"妖")
     }
    convenience init(){
     self.init(age:12)
     }
 }
 let c4 = Child4()
 c4.name

以上就是Swift中类与结构的初始化示例解析的详细内容,更多关于Swift类与结构初始化的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/zhangyingai/p/7098973.html

延伸 · 阅读

精彩推荐
  • SwiftSwift 编程语言入门教程

    Swift 编程语言入门教程

    今天在网上看到一篇非常好的Swift 编程语言入门教程,分享给大家...

    gashero1452020-12-16
  • SwiftSwift中字典与JSON转换的方法

    Swift中字典与JSON转换的方法

    Swift中经常会遇到字典和字符串的相互转换,本篇文章主要介绍了Swift中字典与JSON转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    FlyElephant13862021-01-05
  • Swift详解Swift编程中的常量和变量

    详解Swift编程中的常量和变量

    这篇文章主要介绍了Swift编程中的常量和变量,是Swift入门学习中的基础知识,需要的朋友可以参考下...

    Swift教程网5102020-12-22
  • SwiftSwift教程之字符串和字符详解

    Swift教程之字符串和字符详解

    这篇文章主要介绍了Swift教程之字符串和字符详解,本文讲解了字符串常量、初始化一个空串、变长字符串、字符串不是指针,而是实际的值、字符等内容...

    Swift教程网4252020-12-18
  • Swift用Swift编写自动录音器

    用Swift编写自动录音器

    这篇文章主要介绍了用Swift编写自动录音器,有需要的朋友可以借鉴下...

    董铂然4572020-12-21
  • Swiftswift3.0 创建sqlite数据库步骤方法

    swift3.0 创建sqlite数据库步骤方法

    本篇文章主要介绍了swift3.0 创建sqlite数据库步骤方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    tergun9702021-01-05
  • Swiftswift中defer几个简单的使用场景详解

    swift中defer几个简单的使用场景详解

    在Swift 2.0中,Apple提供了defer关键字,让我们可以实现同样的效果,这篇文章主要介绍了关于swift中defer几个简单的使用场景的相关资料,文中通过示例代码...

    juejin8472021-01-10
  • Swift通过示例分析Swift单例模式

    通过示例分析Swift单例模式

    这篇文章主要介绍了通过示例分析Swift单例模式的三种方法,分别是全局变量,内部变量,dispatch_once方式,有需要的小伙伴可以参考下。...

    Swift教程网3202020-12-20