Swift 的
protocol
可以被class
、struct
、enum
实现。所以在方法前边添加mutating
来修饰的话是为了能在该方法中修改struct
、enum
的变量,若没有加这个关键字的话别人用struct
、enum
来实现就不能改变变量了。
-
声明一个协议,用
mutating
来修饰。
protocol JCTestProtocol
{
var numberOfWheels: Int {get}
var testColor: UIColor { get set}
var testName: String { get }
mutating func changeColor()
}
-
在struct中使用
struct JCMyHeade: JCTestProtocol {
let numberOfWheels: Int = 4
var testColor: UIColor = UIColor.red
var testName: String = "码农晨仔"
mutating func changeColor() {
testColor = .yellow
}
}
-
在Class中使用
class JCMyBody: JCTestProtocol {
var numberOfWheels: Int = 3
var testColor: UIColor = UIColor.blue
var testName: String {
get {
return "码农晨仔"
}
}
func changeColor() {
testColor = .black
}
}
-
在enum中使用
enum JCMyFooter: JCTestProtocol {
var testColor: UIColor {
get {
return .black
}
set {
}
}
var numberOfWheels: Int {
get {
return 10
}
}
var testName: String {
get {
return "码农晨仔"
}
}
mutating func changeColor() {
self.testColor = UIColor.gray
}
}
-
可选协议使用
@objc
关键字来实现
//可选的协议属性或者方法
//'optional' can only be applied to members of an @objc protocol
@objc protocol JCTestTwoProtocol {
@objc optional var heade: String { get set}
@objc optional func getHeadeNmae()
}
网友评论