【发布时间】:2015-09-28 04:32:45
【问题描述】:
我想扩展字典并将其限制为 NSDate 的特定键类型,其值类型为 Array<MyClass>
MyClass 是一个没有子类的 swift 类。
extension Dictionary where Key: NSDate, Value: Array<MyClass>{
func myFunction() -> Int{
// Some thing useful
}
}
以上代码返回构建错误:
类型“值”限制为非协议类型 '数组'
好吧,看来它需要被限制到一个特定的协议,但奇怪的是,当我将 Value 限制为:
扩展字典,其中键:NSDate,值: 我的班级
编译器没有报错,构建成功。但是 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] 的值类型?
【问题讨论】:
-
对您的问题的建议:标题可以是更具体的问题,例如Extending dictionary with type constraint using a Struct。此外,如果您从示例中删除
OP1ScheduleControlGraphicItem并将其替换为NSString或UIView(已经存在的内容)之类的内容,则可以更轻松地复制和粘贴示例并尝试它们。 -
是的,谢谢您指出。我将把 MyClass 改为。我认为重要的是要注意它是一个没有子类的快速类。
标签: swift swift-extensions swift-dictionary