2

我想扩展字典并将其限制为具有类型值的 NSDate 的特定键类型Array<MyClass>

MyClass 是一个没有子类的 swift 类。

extension Dictionary where Key: NSDate, Value: Array<MyClass>{
    func myFunction() -> Int{
        // Some thing useful
    }
}

上面的代码返回一个构建错误:

类型“值”限制为非协议类型“数组”

好的,所以它似乎需要被限制到一个特定的协议,但奇怪的是,当我将 Value 限制为:

扩展字典,其中键:NSDate,值:MyClass

编译器不会抱怨并且构建成功。但是 MyClass 不是协议。那么给了什么?

我设法像这样限制它:

extension Dictionary where Key: NSDate, Value: CollectionType, Value.Generator.Element: MyClass{
    func myFunction() -> Int{
        var count = 0
        for (_, graphicItemArray) in self{
            count+= (graphicItemArray as! [MyClass]).count
        }

        return count
    }
}

但这需要强制转换,因为我需要以整数形式获取 count 属性。

那么为什么我不能将它明确地限制为 [MyClass] 的值类型呢?

4

1 回答 1

1

不能使用where带有结构的子句可能是一个错误。检查where 子句的语言参考并遵循

conformance-requirement → type-identifier­ | ...

似乎type-identifier应该接受 a struct,即使他们使用的示例是Int.

这可能是需要提交错误的东西。


_ArrayType与您的特定问题相关,如果您使用哪个协议来Array实现并具有您需要的方法,它似乎可以工作。

extension Dictionary where Key: NSDate, Value: _ArrayType ...

我不确定使用这种内部协议是否会标记您的应用程序并使其无法通过 Apple 审核。

于 2015-09-28T05:57:25.460 回答