函數
和oc中的函數一樣,
代碼實現(xiàn)
- 函數的定義
- 格式
func 函數名(行參列表) -> 返回值 {代碼實現(xiàn)}
- 調用
let result = 函數名(值1, 參數2: 值2...)
- 格式
func sum(a: Int, b: Int) -> Int {
return a + b
}
let result = sum(10, b: 20)
- 沒有返回值的函數,一共有三種寫法
- 省略
- ()
- Void
func demo(str: String) -> Void {
print(str)
}
func demo1(str: String) -> () {
print(str)
}
func demo2(str: String) {
print(str)
}
demo("hello")
demo1("hello world")
demo2("olleh")
- 外部參數
- 在形參名前再增加一個外部參數名蚕愤,能夠方便調用人員更好地理解函數的語義
- 格式:
func 函數名(外部參數名 形式參數名: 形式參數類型) -> 返回值類型 { // 代碼實現(xiàn) }
- Swift 2.0 中鞭达,默認第一個參數名省略
func sum1(num1 a: Int, num2 b: Int) -> Int {
return a + b
}
sum1(num1: 10, num2: 20)
構造函數基礎
構造函數
是一種特殊的函數冰寻,主要用來在創(chuàng)建對象時初始化對象,為對象成員變量
設置初始值饥悴,在 OC 中的構造函數是 initWithXXX斥难,在 Swift 中由于支持函數重載,所有的構造函數都是init
構造函數的作用
- 分配空間
alloc
- 設置初始值
init
必選屬性
- 自定義
Person
對象
class Person: NSObject {
/// 姓名
var name: String
/// 年齡
var age: Int
}
提示錯誤 Class 'Person' has no initializers
-> 'Person' 類沒有實例化器s
原因:如果一個類中定義了必選屬性乍构,必須通過構造函數為這些必選屬性分配空間并且設置初始值
-
重寫
父類的構造函數
/// `重寫`父類的構造函數
override init() {
}
提示錯誤 Property 'self.name' not initialized at implicitly generated super.init call
-> 屬性 'self.name' 沒有在隱式生成的 super.init 調用前被初始化
- 手動添加
super.init()
調用
/// `重寫`父類的構造函數
override init() {
super.init()
}
提示錯誤 Property 'self.name' not initialized at super.init call
-> 屬性 'self.name' 沒有在 super.init 調用前被初始化
- 為必選屬性設置初始值
/// `重寫`父類的構造函數
override init() {
name = "張三"
age = 18
super.init()
}
注意
- 非 Optional 屬性,都必須在構造函數中設置初始值扛点,從而保證對象在被實例化的時候哥遮,屬性都被正確初始化
- 在調用父類構造函數之前岂丘,必須保證本類的屬性都已經完成初始化
- Swift 中的構造函數不用寫
func
子類的構造函數
- 自定義子類時,需要在構造函數中昔善,首先為本類定義的屬性設置初始值
- 然后再調用父類的構造函數元潘,初始化父類中定義的屬性
/// 學生類
class Student: Person {
/// 學號
var no: String
override init() {
no = "001"
super.init()
}
}
注意
- 先調用本類的構造函數初始化本類的屬性
- 然后調用父類的構造函數初始化父類的屬性
- Xcode 7 beta 5之后畔乙,父類的構造函數會被自動調用君仆,強烈建議寫
super.init()
,保持代碼執(zhí)行線索的可讀性 -
super.init()
必須放在本類屬性初始化的后面牲距,保證本類屬性全部初始化完成
Optional
屬性
- 將對象屬性類型設置為
Optional
class Person: NSObject {
/// 姓名
var name: String?
/// 年齡
var age: Int?
}
-
可選屬性
不需要設置初始值返咱,默認初始值都是 nil -
可選屬性
是在設置數值的時候才分配空間的,是延遲分配空間的牍鞠,更加符合移動開發(fā)中延遲創(chuàng)建的原則