獻(xiàn)給一起學(xué)習(xí)的小伙伴
- 做OC開發(fā)也快2年了,最近公司要求Swift來開發(fā),組里的小伙伴就叫我整理資料給他們,所以就抽空寫了這個(gè),每天寫一點(diǎn),把OC 和**Swift **的不同點(diǎn)都標(biāo)注出來,方便大家對比,我也小小的回顧一下,希望看的小伙伴們持續(xù)關(guān)注.
- 今天大概說下枚舉類型渺蒿、結(jié)構(gòu)體的基本使用,開搞:
1- 結(jié)構(gòu)體
結(jié)構(gòu)體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合
結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu)
結(jié)構(gòu)體是值類型,在方法中傳遞時(shí)是值傳遞
結(jié)構(gòu)的定義格式
struct Location {
var x : Double
var y : Double
}
// 初始化結(jié)構(gòu)體
struct Location {
var x : Double
var y : Double
}
// 創(chuàng)建結(jié)構(gòu)體
let location = Location(x: 90, y: 90)
- 結(jié)構(gòu)體的增強(qiáng)
- 默認(rèn)情況下創(chuàng)建Location時(shí)使用Location(x: x值, y: y值)
- 但是為了讓我們在使用結(jié)構(gòu)體時(shí)更加的靈活,swift還可以對構(gòu)造函數(shù)進(jìn)行擴(kuò)充
- 擴(kuò)充的注意點(diǎn)
- 在擴(kuò)充的構(gòu)造函數(shù)中必須保證成員變量是有值的
- 擴(kuò)充的構(gòu)造函數(shù)會覆蓋原有的構(gòu)造函數(shù)
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")
- 為結(jié)構(gòu)體擴(kuò)充方法
- 為了讓結(jié)構(gòu)體使用更加靈活,swift的結(jié)構(gòu)體中可以擴(kuò)充方法
- 例子:為了Location結(jié)構(gòu)體擴(kuò)充兩個(gè)方法
- 向水平方向移動的方法
- 向垂直方向移動的方法
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
}
}
2- 枚舉類型
- 枚舉定義了一個(gè)通用類型的一組相關(guān)的值,使你可以在你的代碼中以一個(gè)安全的方式來使用這些值娜膘。
- 在 C/OC 語言中枚舉指定相關(guān)名稱為一組整型值
- Swift 中的枚舉更加靈活碱屁,不必給每一個(gè)枚舉成員提供一個(gè)值.也可以提供一個(gè)值是字符串宛逗,一個(gè)字符逻翁,或是一個(gè)整型值或浮點(diǎn)值
- 枚舉類型的語法
- 使用enum關(guān)鍵詞并且把它們的整個(gè)定義放在一對大括號內(nèi)
- case關(guān)鍵詞表明新的一行成員值將被定義
- 不像 C 和 Objective-C 一樣诲祸,Swift 的枚舉成員在被創(chuàng)建時(shí)不會被賦予一個(gè)默認(rèn)的整數(shù)值
- 在上面的CompassPoints例子中矛缨,North,South舶担,East和West不是隱式的等于0坡疼,1,2和3
- 所以不能像OC一樣 用簡寫
enum CompassPoint {
case North
case South
case East
case West
}
enum Planet {
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
- 給枚舉類型賦值
- 枚舉類型賦值可以是字符串/字符/整型/浮點(diǎn)型
- 注意如果有給枚舉類型賦值,則必須在枚舉類型后面明確說明具體的類型
// 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
}
// 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")
}
}
以前的文章
Swift學(xué)習(xí)歷程02 - 判斷語句 循環(huán)語句
Swift學(xué)習(xí)歷程03 - 字符串 數(shù)組 字典
Swift學(xué)習(xí)歷程04 - 元組 可選類型 類型轉(zhuǎn)化
Swift學(xué)習(xí)歷程05 - 函數(shù) 類型轉(zhuǎn)化
今天就先寫這些了,還有其他事,還有一些小伙伴私信我,問我的微博 微信 ,我以后就統(tǒng)一在結(jié)尾都貼上吧!
博客:http://www.cnblogs.com/hongdongheng
微博:http://weibo.com/u/3041860075
微信:nan46825
希望小伙伴多多留言和點(diǎn)贊,和我交流.
寫于 2016年5月18日 晚