swift 中协议中的方法用mutating声明的用处

2021-03-28  本文已影响0人  90后的晨仔

Swift 的 protocol可以被classstructenum实现。所以在方法前边添加 mutating来修饰的话是为了能在该方法中修改 structenum的变量,若没有加这个关键字的话别人用structenum来实现就不能改变变量了。

protocol JCTestProtocol
{
    var numberOfWheels: Int {get}
    var testColor: UIColor { get set}
    var testName: String   { get }
    
    mutating  func changeColor()
}
struct JCMyHeade: JCTestProtocol {
    
    let numberOfWheels: Int = 4
    var testColor: UIColor = UIColor.red
    var testName: String = "码农晨仔"
    mutating func changeColor() {
        testColor = .yellow
    }
}


class JCMyBody: JCTestProtocol {
    var numberOfWheels: Int = 3
    var testColor: UIColor = UIColor.blue
    var testName: String {
        
        get {
            return  "码农晨仔"
        }
        
        
    }
    
    
    func changeColor() {
        testColor = .black
    }
    
}


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
    }
    
}

//可选的协议属性或者方法
//'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()
}

上一篇 下一篇

猜你喜欢

热点阅读