- 定义一个协议
protocol GenshinWorld {
var countryName:String { get set } // 国家名字
var demonGod:String { get } // 魔神
static var montherLand:String { get } // 所属大陆
}
- 定义一个结构体 遵循协议
struct Country:GenshinWorld {
var countryName: String
var demonGod: String
static var montherLand: String = "提瓦特大陆"
var theme:String = ""
}
- 协议的属性赋初始值
extension GenshinWorld {
var demonGod:String {
get {
return "巴巴托斯"
}
}
}
- 协议添加方法
protocol GenshinWorld {
var countryName:String { get set } // 国家名字
var demonGod:String { get } // 魔神
static var montherLand:String { get } // 所属大陆
static func demonWellKonwnSaying()
mutating func changeDemonGodName()
}
struct Country:GenshinWorld {
var countryName: String
var demonGod: String
static var montherLand: String = "提瓦特大陆"
var theme:String = ""
static func demonWellKonwnSaying() {
print("原神启动")
}
mutating func changeDemonGodName() {
self.demonGod = "温迪"
}
}
修改结构体属性的方法一定要用 mutating 修饰
- 一个小例子
protocol WindProtocol {
func resistance(number:Double) // 抗性
}
class WindRole:WindProtocol {
var name:String
init(name: String) {
self.name = name
}
func qSkill() {
other()
}
func resistance(number: Double) {
print("\(name) 减少 \(number) 风抗")
}
}
extension WindProtocol where Self:WindRole {
func other() {
print("Q还能回血")
}
}