枚舉類型
枚舉類型的介紹
概念介紹
- 枚舉定義了一個通用類型的一組相關的值,使你可以在你的代碼中以一個安全的方式來使用這些值。
- 在 C/OC 語言中枚舉指定相關名稱為一組整型值
-
Swift 中的枚舉更加靈活,不必給每一個枚舉成員提供一個值.也可以提供一個值是字元串,一個字元,或是一個整型值或浮點值
枚舉類型的文法
- 使用enum關鍵詞并且把它們的整個定義放在一對大括号内
// 1.枚舉類型的指派
enum CompassPoint : Int {
case North = 1
case South = 2
case East = 3
case West = 4
}
enum Planet {
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
枚舉類型的定義
- 以下是指南針四個方向的一個例子
- case關鍵詞表明新的一行成員值将被定義
- 不像 C 和 Objective-C 一樣,Swift 的枚舉成員在被建立時不會被賦予一個預設的整數值
- 在上面的CompassPoints例子中,North,South,East和West不是隐式的等于0,1,2和3
- 定義方式二:多個成員值可以出現在同一行上
// 2.枚舉類型的使用
let p = Planet(rawValue: 3)
if let p = p {
switch p {
case .Mercury:
print("Mercury")
case .Venus:
print("Venus")
case .Earth:
print("Mercury")
case .Mars:
print("Mars")
case .Jupiter:
print("Jupiter")
case .Saturn:
print("Saturn")
case .Uranus:
print("Uranus")
case .Neptune:
print("Neptune")
}
}
給枚舉類型指派
- 枚舉類型指派可以是字元串/字元/整型/浮點型
- 注意如果有給枚舉類型指派,則必須在枚舉類型後面明确說明具體的類型
- 1.枚舉類型的指派
- 2.枚舉類型的使用
結構體
結構體的介紹
概念介紹
- 結構體(struct)是由一系列具有相同類型或不同類型的資料構成的資料集合
- 結構體(struct)指的是一種資料結構
- 結構體是值類型,在方法中傳遞時是值傳遞
- 結構的定義格式
結構的定義格式
struct 結構體名稱 {
// 屬性和方法
}
為什麼需要結構體?
先來看一個例子
- 我們要計算平面坐标裡某個點距點Center的距離是否小于200
- 算起來很簡單,勾股定理就搞定了:
Swift之枚舉類型&結構體枚舉類型結構體

- 其中sqrt(n)用來計算n的平方根
- pow(x, n)用來計算x的n次方
let centerX : Double = 100
let centerY : Double = 100
func inRange(x : Double, y : Double) -> Bool {
let disX = x - centerX
let disY = y - centerX
let dis = sqrt(pow(disX, 2) + pow(disY, 2))
return dis < 200
}
let x : Double = 100
let y : Double = 1000
inRange(x, y: y)
問題
- 但是這樣有一個不足,當我們需要比較很多個點和Center的距離的時候,這些數字并不能明确告訴我們它們代表的位置的意義,甚至我們都無法知道它們代表一個數字。
- 如果我們可以像這樣來比較位置:
- 相比數字,它們看上去就會直覺的多
- 而這,就是我們需要自定義struct類型最直接的原因
inRange(location1)
inRange(myHome)
- 使用結構進行改進
// 初始化結構體
struct Location {
var x : Double
var y : Double
}
// 建立結構體
let location = Location(x: 90, y: 90)
// 優化剛才的方法
func inRange(location : Location) -> Bool {
let disX = location.x - centerX
let disY = location.y - centerY
let dis = sqrt(pow(disX, 2) + pow(disY, 2))
return dis < 200
}
inRange(location)
結構體的增強
- 擴充構造函數
- 預設情況下建立Location時使用Location(x: x值, y: y值)
-
但是為了讓我們在使用結構體時更加的靈活,swift還可以對構造函數進行擴充
擴充的注意點
- 在擴充的構造函數中必須保證成員變量是有值的
- 擴充的構造函數會覆寫原有的構造函數
struct Location {
var x : Double
var y : Double
init(x : Double, y : Double) {
self.x = x
self.y = y
}
init(xyString : String) {
let strs = xyString.componentsSeparatedByString(",")
x = Double(strs.first!)!
y = Double(strs.last!)!
}
}
let location = Location(x: 100, y: 100)
let location1 = Location(xyString: "100,100")
- 為結構體擴充方法
- 為了讓結構體使用更加靈活,swift的結構體中可以擴充方法
- 例子:為了Location結構體擴充兩個方法
- 向水準方向移動的方法
- 向垂直方向移動的方法
struct Location {
var x : Double
var y : Double
init(x : Double, y : Double) {
self.x = x
self.y = y
}
init(xyString : String) {
let strs = xyString.componentsSeparatedByString(",")
x = Double(strs.first!)!
y = Double(strs.last!)!
}
mutating func moveH(x : Double) {
self.x += x
}
mutating func moveV(y : Double) {
self.y += y
}
}
注意:
- 如果我們使用的Location不是自己定義的,但是我們仍舊希望在自己的項目裡擴充Location的操作
- Swift也能幫我們達成,這個機制,叫做extension
extension Location {
mutating func moveH(x : Double) {
self.x += x
}
mutating func moveV(y : Double) {
self.y += y
}
}
該轉載文章位址:https://www.cnblogs.com/chenjianjian/p/5457550.html