The Swift Programming Language学习笔记(二十一)——嵌套类型
发布时间:2020-12-14 07:15:27 所属栏目:百科 来源:网络整理
导读:嵌套类型 嵌套类型实践 引用嵌套类型 嵌套类型 枚举常被用于为特定类或结构体实现某些功能。类似地,也能够在某个复杂的类型中,方便地定义工具类或结构体来使用。为了实现这种功能,Swift允许你定义 嵌套类型 , 可以在支持的类型中定义嵌套的枚举、类和结
嵌套类型枚举常被用于为特定类或结构体实现某些功能。类似地,也能够在某个复杂的类型中,方便地定义工具类或结构体来使用。为了实现这种功能,Swift允许你定义 要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外部类型的{}内,而且可以根据需要定义 嵌套类型实践/** * 一个结构体BlackjackCard(二十一点),用来模拟BlackjackCard中的扑克牌点数。在BlackjackCard中,Ace牌的面值可以是1或者11。 */
struct BlackjackCard {
enum Suit: Character {
case Spades = "?"
case Hearts = "?"
case Diamonds = "?"
case Clubs = "?"
}
enum Rank: Int {
case Two = 2,Three,Four,Five,Six,Seven,Eight,Nine,Ten
case Jack,Queen,King,Ace
struct Values {
let first: Int
let second: Int?
}
var values: Values {
switch self {
case .Ace:
return Values(first: 1,second: 11)
case .Jack,.Queen,.King:
return Values(first: 10,second: nil)
default:
return Values(first: self.rawValue,second: nil)
}
}
}
let rank: Rank
let suit: Suit
var description: String {
var s = "(suit.rawValue)"
s += "(rank.values.first)"
s += rank.values.second != nil ? " or (rank.values.second!)" : ""
return s
}
}
let ace = BlackjackCard(rank: BlackjackCard.Rank.Ace,suit: BlackjackCard.Suit.Diamonds)
print(ace) // BlackjackCard(rank: BlackjackCard.Rank.Ace,suit: BlackjackCard.Suit.Diamonds)
print(ace.description) // ?1 or 11
引用嵌套类型在外部引用嵌套类型时,在嵌套类型的类型名前加上其外部类型的类型名作为前缀。 /** * 一个结构体BlackjackCard(二十一点),用来模拟BlackjackCard中的扑克牌点数。在BlackjackCard中,Ace牌的面值可以是1或者11。 */
struct BlackjackCard {
enum Suit: Character {
case Spades = "?"
case Hearts = "?"
case Diamonds = "?"
case Clubs = "?"
}
enum Rank: Int {
case Two = 2,second: nil)
}
}
}
let rank: Rank
let suit: Suit
var description: String {
var s = "(suit.rawValue)"
s += "(rank.values.first)"
s += rank.values.second != nil ? " or (rank.values.second!)" : ""
return s
}
}
let heartSymbol = BlackjackCard.Suit.Hearts.rawValue
print(heartSymbol) // ?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 如何在rails 3控制台中着色记录器输出
- Oracle Error:ORA-01465: 无效的十六进制数字【解决办法】
- AJAX - onreadystatechange 事件
- react-native react-native-vector-icons:如何使用字体真棒
- oracle常用sql查询语句部分集合(图文)
- c# – ‘WMD’Web Markdown以及如何实施图像上传工具
- ruby-on-rails – 轮胎/ ElasticSearch单表继承支持
- 开源 – 跨平台C IMAP库[已关闭]
- 正则表达式的基本知识点
- c# – 为什么英文(加勒比)的文化名称“en-029”?