繁体   English   中英

Swift协议扩展-无法访问功能

[英]Swift Protocol Extension - Can't Access Func

如果我有一系列类似的协议:

    protocol Customer {

    var name:String { get set }
    var age: Int { get set }
    var startDate:Date { get set }
    var meals:Array<String> { get set }
    var market:Int { get set }

}

protocol Vegan:Customer {

}

protocol Vegetarian:Customer {

}

protocol Paleo:Customer {


}

和扩展是这样的:

    extension Customer where Self:Vegan, Self:Vegetarian {

    func getMeals() -> Array<String> {
        return ["VeganMeal1", "VeganMeal2", "VeganMeal3", "VeganMeal4"]
    }
}

extension Customer where Self:Vegetarian {

    func getMeals() -> Array<String> {
        return ["VegetarianMeal1", "VegetarianMeal2", "VegetarianMeal3", "VegetarianMeal4"]
    }
}

extension Customer where Self:Paleo {

    func getMeals() -> Array<String> {
        return ["PaleoMeal1", "PaleoMeal2", "PaleoMeal3", "PaleoMeal4"]
    }
}

和这个结构

    struct aCustomer:Customer, Vegan {

    var name:String
    var age: Int
    var startDate:Date
    var meals:Array<String>
    var market:Int

}

当我基于该结构创建新对象时

var newCustomer = aCustomer(name:"William", age:40, startDate:Date(), meals:[], market:1)

为什么无法访问扩展中的getMeals函数? 我收到一条错误消息,指出getMeals是一个含糊的参考。

在此处输入图片说明

extension Customer where Self:Vegan, Self:Vegetarian {

如果采用者或客户同时采用素食主义者和素食主义者,则扩展客户。 您的aCustomer (以小写字母开头的结构类型-恐怖,即恐怖)不会这样做,因此扩展名不适用于它。

如果目标是注入相同的代码既可以当采用者采用素食或者收养采用素食,使用两个扩展,或者,如果你不喜欢重复,让他们都采用的是扩展了一些“高级”协议需要注入的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM