最近在學習swift,期間也看了不少教程和大神的博客,最後把筆記放這裏,方便查看複習~swift
附上學習資料地址:w3cschool-Swift 教程 、 YungFan大神的簡書(推薦看一下,有些知識點總結地簡直通俗易懂)markdown
enum
:枚舉是一種類型,能夠像類和結構體同樣,擁有本身的屬性和方法函數
swift中的枚舉,能夠提供的值類型有:字符串,字符,整型值,浮點值等。這一點不一樣於oc,oc中是默認整型值oop
//定義Int類型的枚舉
enum CompassPoint:Int {
case North
case South
case East
case West
}
let stt: CompassPoint = .South
//經過rawValue拿到原始值,由於是int類型,默認從0開始
print(stt.rawValue)
複製代碼
經過rawValue
獲取枚舉值設定的原始值學習
注意:spa
遍歷:code
//經過聲明的時候添加 CaseIterable 來容許遍歷
enum CompassPoint:Int, CaseIterable {
case North
case South
case East
case West
}
//經過allCases進行遍歷
for method in CompassPoint.allCases {
print(method)
}
複製代碼
struct
:聲明結構體,內部能夠聲明成員變量、成員方法。所以更接近於一個類,能夠說是類的一個輕量化實現orm
注意:對象
結構體實例老是經過值傳遞來定義你的自定義數據類型。繼承
結構體老是經過被複制的方式在代碼中傳遞,所以它的值是不可修改的。
若是要在成員方法中去改變成員屬性,須要關鍵字mutating
struct Person {
var name = "Zhangsan"
var age = 10
var sex = "man"
func say(){
print("人會說話")
}
}
//初始化寫法1:只有成員變量擁有默認值的時候才能使用
var p1 = Person()
//初始化寫法2:從新賦值
var p2= Person(name: "Lisi", age: 20, sex: "woman")
複製代碼
代碼示例:
//聲明:
struct Person {
var name:String
var age:Int
func introduce(){
print("我叫:\(name),今年\(age)歲")
}
}
//調用:
var person = Person(name: "xiaoMing",age: 20)
person.introduce()
//輸出:
我叫:xiaoMing,今年20歲
複製代碼
不一樣狀況的操做:
//聲明方式1:直接給成員變量賦值
struct myStruct1 {
var num1 = 100
var num2 = 200
var num3 = 300
}
//聲明方式2:成員變量經過初始化參數進行賦值
struct myStruct2 {
var num1: Int
var num2: Int
var num3: Int
init(mark: Int) {
self.num1 = mark
self.num2 = mark * 2
self.num3 = mark * 3
}
}
複製代碼
調用:
let stu1 = myStruct1()
print(stu1.num1,stu1.num2,stu1.num3)
let stu2 = myStruct2(mark: 500)
print(stu2.num1,stu2.num2,stu2.num3)
//值拷貝
var stu3 = stu2
print("修改前: \(stu3.num1)")
stu3.num1 = 600
print("修改後: \(stu3.num1)")
複製代碼
打印:
100 200 300
500 1000 1500
修改前: 500
修改後: 600
複製代碼
class
: swift中用class
關鍵字定義類,經過.(點語法)
進行訪問類的屬性和方法
定義:
class Person {
var name = "Zhangsan"
var age = 10
func say(){
print("\(name)說話了")
}
}
//調用
var p1 = Person()
p1.say()
複製代碼
注意:類默認沒有自動實現構造函數,若是聲明成員變量的時候沒有賦值,就須要實現構造函數來進行賦值,不然沒法編譯
class Person {
var name : String
var age : Int
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
//調用
var p1 = Person(name: "zhangsan", age: 10)
複製代碼
struct
和 class
比較struct是結構體,class是類
代碼示例:
struct myStru {
var width = 200
}
class myClass {
var width = 200
}
//調用
var stu = myStru()
var stu2 = stu
stu2.width = 300
print(stu.width,stu2.width)
//200 300
var cls = myClass()
var cls2 = cls
cls2.width = 300
print(cls.width,cls2.width)
//300 300
複製代碼
二、struct不能被繼承,class能夠被繼承
三、用let修飾class對象,可以修改類的值;若要修改struct的值,要用var來修飾
四、struct是放在棧上,class是放在堆上,所以struct的訪問速度更快
五、struct裏面若是想聲明一個func來修改聲明的屬性,須要添加關鍵字mutating,才能編譯成功;而class不須要
六、全部的struct都有一個自動生成的成員構造器,而class須要本身生成
七、在struct中,成員變量能夠沒有初始值;但在class中,若是成員變量沒有初始值,就必須爲它寫一個構造函數