新型结构体---Swift之Struct

本文深入探讨了Swift中结构体与类之间的相同点与差异,包括属性、方法、构造器、扩展、协议等核心功能,并通过代码示例展示了如何创建和使用结构体实例。

Swift和大部分语言一样都提供了结构体Struct)。结构体这个概念最早是出现在C语言中,不过在C语言中没有Class的概念,所以那时结构体也就不会引起混淆,不过在Swift中,结构体和类有许多相似的地方,所以也就经常引起混淆。下面就列举一下Swift中结构体和类的相似点

*   支持定义属性

*   支持定义方法,这些方法用于实现与类和结构体相关的功能

*   支持定义附属脚本,可以通过附属脚本语法访问他们的值

*   支持定义构造器,主要用于进行初始化

*   支持通过扩展来增强类和结构体默认实现的功能

*   支持协议(protocol),以便对类和结构体提供标准的功能

既然说到了相同点,也不能回避他们的差异,差异就是在功能上类比结构体要强大一点,类支持以下功能:

*   支持继承,允许一个类继承另一个类的功能

*   支持析构方法

*   支持通过引用计数的方式让类对象实例被引用多次

<span style="font-size:18px;"><span style="color:#ff0000;">//创建一个结构体:People</span>
struct People
{
      var name:String <span style="color:#ff0000;">//属性name</span>
      var age:Int <span style="color:#ff0000;">//属性age</span>
}
<span style="color:#ff0000;">//创建一个结构体实例</span>
var people1 = People(name:"Terry",age:20)
<span style="color:#ff0000;">//引用结构体实例</span>
println("Name:\(people1.name),Age:\(people1.age)")
<span style="color:#ff0000;">//输出的结果是:Name:Terry,Age:20
//注意,在创建结构体实例时必须对其进行初始化
//上边的代码在定义结构体时未对属性name和age进行初始化
//所以在实例化的同时进行初始化,即“var people1 = People(name:"Terry",age:20)”
//或按一下方法进行实例化</span>
struct newPeople
{
	var name = ""
	var age = 0
}
var people2 = newPeople()
people2.name = "Terry"
people2.age = 20
println("Name:\(people2.name),Age:\(people2.age)") <span style="color:#ff0000;">//这和上边的输出结果是一样的</span></span>
第二种创建实例的方法是不是和类特别像,这就是Swift中结构体与类相似的地方之一。

上边说过在Swift支持方法,这在之前的语言中是不支持的,这也是Swift中结构体的强大之处之一。

struct newPeople1 {
    var name = ""
    var thisYear:Int = 0
    var borthYear:Int = 0
    var age:Int
    {
        return thisYear - borthYear
    
    }
    func PrintlnAge()  <span style="color:#ff0000;">//定义一个方法用于输出name和age</span>
    {
        println("Name is:\(name),Age is:\(age)")
    }
}

var people3 = newPeople1()
people3.name = "Terry"
people3.thisYear = 2015
people3.borthYear = 1995
people3.PrintlnAge()  <span style="color:#ff0000;"> //输出结果为:Name is:Terry,Age is:20</span>

结构体中支持方法,使得结构体的功能变得强大,当然也使得结构体和类容易混淆。

在Swift中,结构体实现了许多类的功能,比如构造器、析构器和下标(Subscript)等功能,正是通过对结构体功能的扩充,使得结构体的功能增强了很多。

<span style="color:#ff0000;">//构造器</span>
struct newPeople2 {
    var name:String
    init()  <span style="color:#ff0000;">//当创建newPeople2时会调用init方法</span>
    {
        name = "Terry"
    }
}
var people4 = newPeople2()
println("Name is:\(people4.name)")
结构体的很多新功能还没有一一举例说明,后续还会继续补充。。。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值