是否有可能在Swift中实现类似的功能?
extension Array {
func processItems<Element: Protocol1>() {
for item in self {
// deal with Protocol1 objects
}
}
func processItems<Element: Protocol2>() {
for item in self {
// deal with Protocol2 objects
}
}
}
我想要实现的是根据数组中元素的类型扩展Array
和重载processItems
。
另一种方法是使用单个函数并使用可选的强制转换/绑定,但是我以这种方式放松了类型的安全性,如果if-let
可能最终会出现一个包含很多函数的庞大函数&#39; S
func processItem() {
for item in self {
if let item = item as? Protocol1 {
// deal with Protocol1 objects
} else if let item = item as? Protocol2 {
// deal with Protocol2 objects
}
}
},
或将processItems
声明为自由函数:
func processItems<T: Protocol1>(items: [T]) {
// ...
}
func processItems<T: Protocol2>(items: [T]) {
// ...
}
但是,我想知道我是否可以&#34;嵌入&#34;将函数放入Array
类,以使其本地化。如果可以,那么该技术可以应用于其他泛型类(内置或自定义)。
答案 0 :(得分:3)
这个怎么样?
extension Array where Element: Protocol1 {
func processItems() {
for item in self { // item conforms to Protocol1
...