加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别

发布时间:2020-12-14 01:58:16 所属栏目:百科 来源:网络整理
导读:由 solar 在 1年前 发布 元组(tuple) 元组是多个值组成的复合值类型,例如,你可以定义一个含有整形和字符串的tuple let amout=(100,”EUR”) 当你函数需要返回多个值时,元组这个时候非常有用,你可以使用下标方式来访问元组中的值,如.0,.1以此类推,如下: let

由 solar 在 1年前 发布

元组(tuple)
元组是多个值组成的复合值类型,例如,你可以定义一个含有整形和字符串的tuple

let amout=(100,”EUR”)
当你函数需要返回多个值时,元组这个时候非常有用,你可以使用下标方式来访问元组中的值,如.0,.1以此类推,如下:

let currency = money.1 // “USD”
如果想要给元组多增加些信息,你也可以给元组每个元素命名:

let money = (amount: 100,currency: “USD”)
现在,你不仅可以通过.1,而且可以通过.currency访问元素值。

let currency = money.currency // “USD”
如果想给货币增加格式化,我们可以这样做:

func format(input: (Int,String)) -> String {
return “I have (input.0) (input.1) in my wallet”
}

println(format(money)) // This prints “I have 100 USD in my wallet”
我们的格式化方法在任何(Int,String)类型Tuple都能正常运行。

let mass = (1,“kg”)

let formatted = format(mass) // “I have 1 kg in my wallet”
结构体(Struct)
事实上,“我有1kg在我的钱包”没有任何意义,因此,接下来我们介绍另外一个结构体类型,结构体(struct)不仅能够有元组类似的数据存储功能,而且能够给结构体定义函数(是元组tuple话,只能定义非成员函数来实现),让我们看看下面的结构体:

struct Money {
let amount: Int
let currency: String
}

let wallet = Money(amount: 100,currency: “USD”)
现在结构体已经有了元组相同的数据存储功能,现在我们来给他增加一个函数

extension Money {
func format() -> String {
return “I have (self.amount) (self.currency) in my wallet”
}
}

println(wallet.format())
如果我们想给重量mass增加一个特有类型,我们可以这样做:

struct Mass {
let quantity: Int
let unit: String

func format() -> String {
    return "I have (self.quantity) (self.unit) in my backpack."
}

}
现在Money类型不仅有函数,而且有明确的名称,在后面一部分代码种,我们不能像mass那样(1,’kg’)传参数.结构体也叫nomial type:即明确了定义类型的名称,如果对象的类型名称相同即相同的类型,在上面的例子代码中,mass和第一次定义的wallet对象有相同的类型成员,但是他们的类型Money和Mass的是属于不同的类型。如果我们调用他们的format函数,会得到不同的结果。

枚举(Enums)
如果你想要将一些值存储在一起,我们可以根据具体情况使用tuple或者struct,当然也可以使用classes,但是如果遇到特殊清空,比如,有些时候我们需要在多项值中选择一个,我们先看看currencies,在之前的代码中,我们用字符串string来做货币单位,假如只允许已知的货币在代码中出现,该怎么办? 我们可以使用enum,假如我们只允许有euros,US dollars 和yen,我们可以建立一个enum类型:

enum Currency {
case EUR
case USD
case YEN
}
现在,假如我们有个Current类型的值,我们知道它是EUR、USD or YEN 其中的一种,但是现在没有办法表示成员代表其他的具体含义,或者当它同时有多个值时也没办法表示.和struct一样,枚举也能定义函数。

extension Currency {
func symbol() -> String {
switch self {
case .EUR: return “

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读