2017-04-27 47 views
0

我要做的是在Swift中模塊化我們的應用程序。模塊通過協議(稱爲服務)相互通信。這裏是我的假設:任何使Swift中的類符合通用協議的方法?

protocol Service { 
    var provider: Any? { get } 
} 

struct ServiceProvider<T> { 
    static func provider() -> Any? { 

     // compile error here, any workaround? 
     struct Imp: T {} 
     return Imp.provider 
    } 
} 

/********** Shopping Trolly Module ************/ 

public protocol ShoppingTrollyService {} 

// provide 
extension ShoppingTrollyService { 
    var provider: Any? { 
     return ShoppingTrollyServiceProvider() 
    } 
} 

//this class can not be accessed from other module directly 
class ShoppingTrollyServiceProvider: ShoppingTrollyService {} 

然後在其他模塊:

let x = ServiceProvider<ShoppingTrollyService>.provider() 
// then call function provided by ShoppingTrollyService 

但我被困在創建一個具體的實例符合某些協議(如上圖所示的錯誤)。任何想法?

回答

0

編譯器錯誤是因爲它不知道什麼類型的T是,因此它是未知的,它有一個成員provider()。你可以通過限制它的類型來告訴編譯器T必須是Service

struct ServiceProvider<T:Service> { // Notice the constraint on T 
    static func provider() -> Any? { 

     struct Imp: T {} 
     return Imp.provider // We can call this because we know T must conform to Service 
    } 
} 
相關問題