gpt4 book ai didi

arrays - Swift 中响应协议(protocol)的类型数组

转载 作者:可可西里 更新时间:2023-11-01 01:28:58 25 4
gpt4 key购买 nike

我正在寻找一种方法来在 Swift 3 中创建响应协议(protocol)的类型数组

这是我的问题(为了示例而简化),我有一个名为 Rule 的协议(protocol):

protocol Rule {
static func check(_ system: MySystem) -> [Inconsistency]
}

和一些响应规则协议(protocol)的类型:

struct FirstRule : Rule {
static func check(_ system: MySystem) -> [Inconsistency] {
...
}
}

struct SecondRule : Rule {
static func check(_ system: MySystem) -> [Inconsistency] {
...
}
}

现在我想用这种方式检查我的系统:

let system = MySystem()
let inconsistencies = system.check([FirstRule, SecondRule])

为了做到这一点,我只需要编写一个简单的扩展:

extension MySystem {
func check(_ rules : [????]) -> [Inconsistency] {
var result = [Inconsistency]()

for rule in rules {
result += rule.check(self)
}

return result
}
}

那么 rules 数组的类型是什么?

当然我希望保持规则检查静态,并且不想创建实例(在那种情况下类型将是 [Rule] 并且它会容易得多)。

因此,如果有人可以提供帮助,我们将不胜感激。提前致谢。

最佳答案

如果您简化除基本要素之外的所有内容,则更容易解决这个问题:

protocol Rule {
static func check()
}
struct S1 : Rule {
static func check() {}
}
struct S2 : Rule {
static func check() {}
}

现在:

let arr : [Rule.Type] = [S1.self, S2.self]
for thing in arr {
thing.check()
}

关于arrays - Swift 中响应协议(protocol)的类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39926294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com