我正在爲我自己的小框架編寫一個小型的控制容器反轉(主要是我可以學到更多),而且我偶然發現了一個問題 - 好吧,這只是最新的幾個問題。在協議定義中,一個Swift typealias可以被約束到另一個嗎?如果不是,我還能如何實現類似組件註冊的功能?
我曾希望swift足夠靈活,可以在C#中移植Castle.Core
的核心模式。我的第一個失望的是蘋果,害得我做這個醜陋提供的弱反射能力...
public protocol ISupportInjection {
}
public protocol IConstructorArguments {
func toArgumentsDictionary() -> [String:AnyObject?]
}
public protocol ISupportConstructorInjection: ISupportInjection {
init(parameters:IConstructorArguments)
}
...的想法是,有一天(不久)我可以對付它,並刪除任何引用到我的服務/組件中的這些約束。
現在我想寫IIocRegistration
兩個typealias
:一個用於TService
,另一個爲TComponent
,理想在那裏TService
是和TComponent
是一個具體struct
或class
實現TService
:
public protocol IIocRegistration {
typealias TService: Any
typealias TComponent: TService, ISupportConstructorInjection
}
但看來TComponent: TService
根據編譯器完全無效,它說:
從非協議,無級式「`Self`.TService」繼承
所以我想知道如何使一個typealias
派生另一個typealias
如果可能的。
請不要端口C#的東西(好像是這個我或T字頭)到斯威夫特的地方不會爲任何Swift開發人員提供任何意義(除非他們真的是正在編寫Swift的C#開發人員),並且會無休止地成爲這個問題的一個要點。「爲什麼這裏有T? 「我在做什麼?」我們不會在Cocoa/CocoaTouch中縮寫。 – nhgrif