2015-02-26 98 views
3

我試圖在我的應用程序上推送MVVM模式,但我發現使用Swift和泛型非常困難。例如:Swift的泛型和協議問題

我的模型圖層上有一個Comic結構。但我希望我的viewControllers消費符合ComicViewModel協議的對象,以增加顧慮的分離。

我包裹在一個名爲Box類的模型結構是這樣定義的:

public class Box<T> { 
    public let value: T 
    public init(_ value: T) { self.value = value } 
} 

這僅用於在Result枚舉來包裝實際的返回值就像一個解釋here

然而,Swift編譯器似乎並不喜歡從ComicComicViewModel的演員陣容,即使我明確定義了演員陣容:

func sampleComics() -> Box<Comic> {...} 
protocol ComicViewModel {...} 
extension Comic : ComicViewModel {...} 

func fetchComicsViewModel() -> Box<ComicViewModel> { 
    return sampleComics() //ERROR 
} 

有充分的操場here

非常感謝您的幫助!

回答

1

很遺憾,Swift不會像那樣執行隱式轉換。截至目前,你必須重新編號Box()的值。

func fetchComicsViewModel() -> Box<ComicViewModel> { 
    return Box(sampleComics().value) 
} 
+0

見關於devforums這個話題:https://devforums.apple.com/message/1101023#1101023 – rintaro

+0

非常傷心,聽到這個......因爲它並不像'Box'ing值那麼簡單,爲了解決這個編譯器限制,我還有很多其他層要深入並進行轉換 –