据我所知,不行。
考虑以下示例:
typealias Height: Float
extension: Height {
}
在这里,Height
并不是一个新类型,它只是Float
的标签,因此您只是扩展了Float
。如果您查看Dictionary
,它是public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible
,因此您尝试实现的目标是
extension BeaconID {}
这是在为 Dictionary
添加特定的泛型参数。
我希望您能够做到以下几点:
typealias BeaconID = Dictionary<Key: String, Value: NSObject>
但这也无法编译,原因是在Swift中,您不能typealias部分类型(换句话说,泛型类型没有具体的泛型参数类型。有关更多信息,请参见此处)。下面是解决typealias泛型类型的一个可能方法,它已在我链接的答案下面注明了。
struct Wrapper<Key: Hashable, Value> {
typealias T = Dictionary<Key, Value>
}
typealias BeaconID = Wrapper<String, NSObject>.T
但是即使你试图扩展BeaconID
,你仍然会收到编译器警告,这最终揭示了问题的核心:
"约束扩展必须在未特化泛型类型'Dictionary'上声明,并通过'where'子句指定约束条件"
受限扩展必须在未指定约束的泛型类型“Dictionary”上声明,该约束由“where”子句指定
。 - BallpointBenextension SomeEnum where Self == .MyCase
这样的东西。这样功能就可以仅针对特定的枚举案例进行定义。 - barndog