Swift語法 Swift5 【09 - 方法】


  • 作者: Liwx
  • 郵箱: 1032282633@qq.com
  • 源碼: 需要源碼的同學, 可以在評論區留下您的郵箱

iOS Swift 語法 底層原理內存管理分析 專題:【iOS Swift5語法】

00 - 匯編
01 - 基礎語法
02 - 流程控制
03 - 函數
04 - 枚舉
05 - 可選項
06 - 結構體和類
07 - 閉包
08 - 屬性
09 - 方法
10 - 下標
11 - 繼承
12 - 初始化器init
13 - 可選項


目錄

  • 01-方法(Method)
  • 02-mutating
  • 03-@discardableResult

01-方法(Method)

  • 枚舉結構體都可以定義實例方法、類型方法
    • 實例方法(Instance Method): 通過實例對象調用
    • 類型方法(Type Method): 通過類型調用, 用static或者class關鍵字定義
class Car {
    static var count = 0
    init() {
        Car.count += 1
    }
    static func getCount() -> Int {
        // 以下幾個等價
        return count
//        return Car.count
//        return self.count   // self類型方法中代表類型
//        return Car.self.count
    }
}

let c0 = Car()
let c1 = Car()
let c2 = Car()
print(Car.getCount())   // 3

-self

  • 實例方法中代表實例對象
  • 類型方法中代表類型
  • 在類型方法static func getCount
    • 類型存儲屬性 count等價于self.countCar.self.countCar.count

02-mutating

  • 結構體枚舉值類型, 默認情況下,值類型的屬性不能被自身的實例方法修改
    • func關鍵字簽加mutating可以允許這種修改行為

  • 結構體mutating使用
struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(deltaX: Double, deltaY: Double) {
        x += deltaX     // 如果方法沒有用mutating修飾 error: left side of mutating operator isn't mutable: 'self' is immutable
        y += deltaY
        //        self = Point(x: x + deltaX, y: y + deltaY)    // 本質也是修改x,y屬性 error: cannot assign to value: 'self' is immutable
    }
}

  • 枚舉mutating使用
enum StateSwitch {
    case low, middle, high
    mutating func next() {  // mutating修飾枚舉實例方法 實例方法內部才能修改屬性
        switch self {
        case .low:
            self = .middle
        case .middle:
            self = .high
        case .high:
            self = .low
        }
    }
}

var s = StateSwitch.low
print(s)    // low
s.next()
print(s)    // middle
s.next()
print(s)    // high
s.next()
print(s)    // low

03-@discardableResult

  • func前面加個@discardableResult, 可以消除: 函數調用后返回值未被使用的警告
struct Point {
    var x = 0.0, y = 0.0
    @discardableResult mutating func moveX(deltaX: Double) -> Double {
        x += deltaX
        return x
    }
}

var p = Point()
p.moveX(deltaX: 10) // 如果沒有用 @discardableResult修飾: warning: Result of call to 'moveX(deltaX:)' is unused

iOS Swift 語法 底層原理內存管理分析 專題:【iOS Swift5語法】

下一篇: 10 - 下標
上一篇: 08 - 屬性


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。