1酱讶、不帶返回值的方法
func methodWithoutReturnValue(a : Int) {
print(a)
}
2彼乌、帶返回值的方法
func methodWithReturnValue(a : Int) -> Int {
return a + 10
}
3、帶參數標簽的方法灶挟,只顯示參數標簽焚挠,不顯示參數名
func writeLetterTo(to aName : String, and bName : String) {
//code
}
//調用
self.writeLetterTo(to: "Jack", and: "Peyton")
4漓骚、帶有默認參數值的方法
func printTwoValue(a : Int, b : Int = 10) {
//code
}
//有2種調用方法
//1. 只給a賦值,b使用默認的10
printTwoValue(a: 2)
//2. 給a蝌蹂,b都賦值,不使用b的默認值
printTwoValue(a: 2, b: 3)
5剃允、帶有可變參數的方法
func printNames(_ names : String...) {
for index in names {
print(index)
}
}
//調用
self.printNames("Jack", "Lucy", "Michael")
6齐鲤、通過inout關鍵字在方法內部修改外面變量(不是對象)的值
我們知道外部的變量,在作為參數時给郊,是拷貝一份全新的值,賦給方法的參數统锤,所以,我們在方法中對參數進行操作的時候饲窿,是不會改變外部變量的值的;Swift提供了inout
關鍵字阀溶,允許我們在方法內部修改外部變量的值鸦泳,例子:
var a = 10
var b = 20
func exchangeOutValues(a : inout Int, b : inout Int) {
//交換啊a,b的值
let c = a
a = b
b = c
}
//調用
exchangeOutValues(a: &a, b: &b)
a 和 b 的值會互換
7徒仓、方法也是對象,它的類型由參數和返回值
決定
//定義一個method
var method : (Int, Int) -> Int
//一個方法的實現
func addTwoIntsValue(a : Int, b : Int) -> Int {
return a + b
}
//給method賦值
method = addTwoIntsValue(a:b:)
//調用
print(method(10, 20))
8掉弛、方法作為方法的參數
//聲明一個方法doSomething喂走,其參數為:類型為(Int) -> Int的方法
func doSomething(method : (Int) -> Int) {
print(method(10))
}
//調用doSomething方法
self.doSomething { (a : Int) -> Int in
return a + 1
}
結果為 11
上面調用doSomething的時候瘫里,方法作為參數的形式很像是閉包
9裤翩、方法作為方法的返回值
//doSomething方法返回一個類型為 (Int)->Int 的方法
func doSomething() -> (Int) -> Int {
return self.returnMethod(a:)
}
//這個方法將作為doSomething方法的返回值
func returnMethod(a : Int) -> Int {
return a + 1
}
//調用doSomething方法绢淀,用一個新的方法接收doSomething方法的返回值
let method = self.doSomething()
//調用最終的方法
print(method(100))
結果為101
類方法和實例方法
1陌选、實例方法
1.1 實例方法的聲明
func 方法名(參數標簽 參數名 : 參數類型) -> 返回值類型 {
方法體
}
上面的例子都是實例方法肴甸,不再贅述
1.2 實例方法的繼承
聲明兩個類ClassA囚巴,ClassB繼承自ClassA
class ClassA : NSObject {
override init() {
super.init()
}
func instanceMethod() {
print("instant method A")
}
}
class ClassB : ClassA {
override init() {
super.init()
}
//override表示重寫父類的方法
override func instanceMethod() {
print("instant method B")
}
}
調用實例方法
let a = ClassA.init()
let b = ClassB.init()
a.instanceMethod()
b.instanceMethod()
結果顯而易見
instant method A
instant method B
2、類方法
2.1彤叉、如何聲明類方法
一般情況下,我們是通過static
關鍵字來聲明類方法浮庐,但是如果一個類方法需要在子類中重寫兼呵,那就必須使用class
關鍵字
//不可被子類重寫
static func classMethod1() {
print("1")
}
//可被子類重寫
class func classMethod2() {
print("2")
}
2.2腊敲、類方法如何繼承
class ClassA : NSObject {
static func classMethod1() {
print("1")
}
class func classMethod2() {
print("2")
}
}
class ClassB : ClassA {
override class func classMethod2() {
print("4")
}
}
classMethod2
是通過class
關鍵字聲明的维苔,所以可以在ClassB中進行重寫;如果你要對classMethod1
進行重寫没宾,會報錯
調用
ClassA.classMethod1()
ClassA.classMethod2()
ClassB.classMethod1()
ClassB.classMethod2()
結果
1
2
1
4