相关疑难解决方法(0)

Swift - 协议扩展 - 属性默认值

假设我有以下协议:

protocol Identifiable {
    var id: Int {get}
    var name: String {get}
}
Run Code Online (Sandbox Code Playgroud)

而且我有以下结构:

struct A: Identifiable {
    var id: Int
    var name: String
}

struct B: Identifiable {
    var id: Int
    var name: String
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我必须"符合"结构A和结构B中的可识别协议.但想象一下,如果我有N个结构需要符合这个协议......我不想'复制/粘贴' '一致性(var id:Int,var name:String)

所以我创建了一个协议扩展:

extension Identifiable {
    var id: Int {
        return 0
    }

    var name: String {
        return "default"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在有了这个扩展,我可以创建一个符合Identifiable协议的结构,而不必实现这两个属性:

struct C: Identifiable {

}
Run Code Online (Sandbox Code Playgroud)

现在问题是我无法为id属性或name属性设置值:

var c: C = C()
c.id = 12 // Cannot assign to …
Run Code Online (Sandbox Code Playgroud)

ios swift protocol-oriented

55
推荐指数
2
解决办法
3万
查看次数

标签 统计

ios ×1

protocol-oriented ×1

swift ×1