Swift - mutating關鍵字的使用


轉載自:http://www.jianshu.com/p/14cc9d30770a  感謝作者:此ID想了很久 

Swift中protocol的功能比OC中強大很多,不僅能再class中實現,同時也適用於structenum
使用 mutating 關鍵字修飾方法是為了能在該方法中修改 struct 或是 enum 的變量,在設計接口的時候,也要考慮到使用者程序的擴展性。所以要多考慮使用mutating來修飾方法。

首先,先定義一個protocol

protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() }

在上面,定義了一個ExampleProtocol,接下來我們寫一個class來遵守這個協議

class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class" var anotherProperty: Int = 110 // 在 class 中實現帶有mutating方法的接口時,不用mutating進行修飾。因為對於class來說,類的成員變量和方法都是透明的,所以不必使用 mutating 來進行修飾 func adjust() { simpleDescription += " Now 100% adjusted" } } // 打印結果 var a = SimpleClass() a.adjust() let aDescription = a.simpleDescription

struct中實現協議ExampleProtocol

struct SimpleStruct: ExampleProtocol { var simpleDescription: String = "A simple structure" mutating func adjust() { simpleDescription += "(adjusted)" } }

enum中實現協議ExampleProtocol

enum SimpleEnum: ExampleProtocol { case First, Second, Third var simpleDescription: String { get { switch self { case .First: return "first" case .Second: return "second" case .Third: return "third" } } set { simpleDescription = newValue } } mutating func adjust() { } }

錯誤信息

如果將ExampleProtocol中修飾方法的mutating去掉,編譯器會報錯說沒有實現protocol。如果將struct中的mutating去掉,則會報錯不能改變結構體的成員。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM