Swift 协议扩展 - 无法访问 Func
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
(以小写字母开头的结构类型?恐怖,恐怖)不会这样做,因此扩展名不适用于它。
如果目标是注入相同的代码要么当采用者采用素食要么当采用者采用素食时,使用两个扩展,或者,如果您不喜欢重复,让它们都采用一些 "higher" 协议,该协议扩展了要注入的所需代码。
如果我有一系列这样的协议:
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
(以小写字母开头的结构类型?恐怖,恐怖)不会这样做,因此扩展名不适用于它。
如果目标是注入相同的代码要么当采用者采用素食要么当采用者采用素食时,使用两个扩展,或者,如果您不喜欢重复,让它们都采用一些 "higher" 协议,该协议扩展了要注入的所需代码。