一、mutating
mutating 關鍵字的作用是為了能在該方法中修改 struct 或是 enum 的變數,在類中實作協議方法不用寫mutating關鍵字
protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() mutating func newTest() } class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 69105 func adjust() { simpleDescription += " Now 100% adjusted." } func newTest() { print("Jiacheng - SimpleClass -> ExampleProtocol -> newTest") } }
在列舉(enum)和機構體(struct)中遵守協議時,如果在實作方法中改變了自己的變數,則方法的宣告和實作都需要加mutating關鍵字,否則會報錯;如果沒有改變變數,則不需要加mutating關鍵字,

二、Swift和OC中protocol的差異
1. OC中的協議只能在類中實作,而Swift中的協議既可在類中實作,也可在列舉和機構體中實作;
2. OC的協議方法有可選關鍵字,Swift沒有,因此在Swift中想給協議方法添加可選關鍵字,則必須給protocol添加@obj關鍵字,宣告這是個OC協議;

3. 列舉和結構體無法實作添加@obj關鍵字的協議,該協議方法也無法添加mutating關鍵字,

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/286153.html
標籤:iOS
上一篇:全網最新iOS面試題-大廠加薪篇
