arrays - 带有协议(protocol)的 Swift 泛型数组

标签 arrays swift generics protocols

我只是好奇是否可以做类似下面的事情

protocol Data { }

class A: Data { }

class B: Data { }

class Generic<T> { }

class doStuff {

    func prepareToDoStuff() {
        self.doTheStuffWithGenerics([Generic<A>(), Generic<B>])
    }

    func doTheStuffWithGenerics<T: Generic<Data>>(_ generics: [T]) {

    }
}

目前我的编译器告诉我不要说

"cannot convert value of type 'Generic[A]' to expected element type 'Generic[Data]'"

有什么想法吗?解决方案?

最佳答案

其他人已经解释了为什么不起作用。所以我只关注解决方法。 Apple 自己解决此问题的方法(例如,查看 Collection 协议(protocol))是使用协议(protocol)。通常将您的逻辑移至 Generic 类,或在您的协议(protocol)上使用扩展类。

例如:

protocol Data { }
protocol GenericDataType {
    func doStuff()
}

class A: Data { }
class B: Data { }


class Generic<T: Data>: GenericDataType {
    func doStuff() {
        print("Processing element")
    }
}

class doStuff {

    func prepareToDoStuff() {
        let array: [GenericDataType] = [Generic<A>(), Generic<B>()]
        self.doTheStuffWithGenerics(array)
    }

    func doTheStuffWithGenerics(_ generics: [GenericDataType]) {
        for element in generics {
            element.doStuff()
        }
    }
}

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

相关文章:

c - 测试 getchar() == EOF 没有按预期工作

jQuery:从数组中选择元素

ios - textViewDidChangeSelection 方法认为 textView.text 为空

ios - 如何使用选项卡和导航 Controller 实例化 View Controller 以进行深度链接?

java - 进行通用数据流转换

将 char 数组转换为 struct * 类型

php - 获取多维数组 PHP 中的最低键 - 数组值

ios - Parse 是否支持抽象 PFObjects?

c++ - 类模板 - 找不到合适的运算符方法

unit-testing - 我可以将类型参数传递给 DUnitx 中的测试用例吗?