2017-04-27 40 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 
    } 
} 
相关问题