小编use*_*320的帖子

Swift 的类类型数组,每个类都符合一个协议并且是通用类的子类

我在 Swift 中有一个带有表单签名的方法:

func myMethod<T>(class: T.Type) where T: SomeClass & MyProtocol

我想要一个变量,它是一个类数组,这些类都是 SomeClass 的子类并符合 MyProtocol。

它看起来像:

let classArray = [SubclassOfSomeClass.self, SubclassTwoOfSomeClass.self, SubclassThreeOfSomeClass.self]

其中 SubclassOfSomeClass、SubclassTwoOfSomeClass 和 SubclassThreeOfSomeClass 均符合 MyProtocol

然后我想调用myMethod如下:

classArray.forEach { classType in

    myMethod(class: classType)
}
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误“无法推断通用参数 T”。这对我来说很有意义,因为classArray变量的类型被推断为[MyClass.Type].

我的问题是,我可以以及如何定义变量classArray,以便编译器知道其中定义的每个类型都符合协议MyProtocol

swift

3
推荐指数
1
解决办法
3726
查看次数

具有等式元素的数组的 Swift 扩展无法调用索引(的 :)

我试图在 Swift 中为 Array 类型添加一个扩展,仅限于其元素符合 equatable 协议的数组。我试图以下列方式定义一个函数:

import Foundation

extension Array where Iterator.Element: Equatable {

    func deletedIndicies<T: Equatable>(newArray: [T]) -> [Int] {

        var indicies = [Int]()

        for element in self {

              if newArray.index(of: element) == nil {

                     indicies.append(self.index(of: element)!)
              }
        }

        return indicies
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数的目的是返回原始数组中没有出现在newArray.

我在 Xcode 中收到的错误是:无法使用类型为 '(of: Element)' 的参数列表调用 'index'

因为我只为元素可相等的数组定义函数,并且要求 的元素是newArray可相等的,所以我不确定为什么我不能调用索引方法。

arrays swift swift-extensions

1
推荐指数
1
解决办法
1983
查看次数

标签 统计

swift ×2

arrays ×1

swift-extensions ×1