我需要创建一个字典变量,其中我的值为SomeOtherClass
类,并且符合SomeProtocol
。这等于Objective-C中的以下声明:
NSMutableDictionary<SomeClass *, SomeOtherClass<SomeProtocol> *> *someOtherBySome;
那么,是否可以使用Swift以相同的简单方式完成它?
我需要它,因为我可以使用签名创建func
:
func someFunc<T: SomeOtherClass where T: SomeProtocol>(param: T, otherParam: String)
我希望从param
获取Dictionary
参数的值而不进行类型转换。
答案 0 :(得分:2)
在Swift中,您无法声明给定class
和符合protocol
的变量。
但是考虑到你已有的定义
class SomeClass: Hashable {
var hashValue: Int { return 0 } // your logic goes here
}
func ==(left:SomeClass, right:SomeClass) -> Bool {
return true // your logic goes here
}
class SomeOtherClass {}
protocol SomeProtocol {}
也许只需让SomeOtherClass
符合SomeProtocol
extension SomeOtherClass: SomeProtocol { }
现在你可以简单地
var dict : [SomeClass: SomeOtherClass] = [SomeClass(): SomeOtherClass()]
let someProtocolValue: SomeProtocol = dict.values.first!
对你有帮助吗?