[swift-users] How to specialize parent protocol's associatetype in sub-protocol?
刘锋炜(kAzec)
kazecx at gmail.com
Sun Jul 31 05:35:23 CDT 2016
Hi Swift users,
I’m defining a sub-protocol inheriting from parent protocol with associatedtype, and I want to specialized the associatedtype to certain concrete type.
For example,
```swift
protocol Foo {
associatedtype Bar
static var bar: Bar { get }
}
protocol A: Foo {
// I want `Bar` to be `Int`.
static var a: Int { get }
static var bar: Int { get }
}
extension A {
typealias Bar = Int
}
```
I want any class/struct adopting protocol `A` having associatedtype `Bar` specialized to Int. However, I found that structs adopting `A` are still capable of override it.
```swift
extension A {
static var bar: Int {
return a
}
static func test() {
print(bar)
}
}
struct AStruct: A {
static let a: Int = 0
static let bar: Bool = false // Bar is now Bool
// static let bar: Int now becomes invisible.
}
AStruct.test() // prints 0
```
The code above gave same result on both Swift 2.2(Xcode 7.3.1) and Swift 3.0(Xcode 8 beta 3).
It’s this expected behavior? Or am I'm getting something wrong here? What about specializing parent’s associatedtype to certain generic type with newly introduced associatedtype? For example,
```swift
protocol B: Foo {
associatedtype T
static var bar: Array<T> { get }
}
extension B {
typealias Bar = Array<T>
}
```
Any idea would be appreciated.
Thanks
Fengwei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160731/72cb261c/attachment.html>
More information about the swift-users
mailing list