Swift无法将我的桌子转换为家具。我必须在where子句中使用类似is
的东西吗?
class Furniture {}
class Table: Furniture {}
extension Array where Element == Furniture {
var material: String { print("material") }
}
let tables = [Table]()
tables.material() // error: '[Table]' is not convertible to 'Array<Furniture>'
答案 0 :(得分:1)
所以这里发生了很多事情
您说的是var material
,但是当您说material()
时,您尝试像函数一样调用它。
您的var material
是一个String,但是您忽略了从其getter返回String。
您不能说Element == Furniture
,因为这使得通用非通用。将其更改为:
。
您的table.material
返回一个值,但是您将其丢弃。
因此,将所有内容都考虑在内:
class Furniture {}
class Table: Furniture {}
extension Array where Element : Furniture {
var material: String { return "Material" }
}
let tables = [Table]()
let s = tables.material
但是,这仅允许您的代码进行编译;正如评论中指出的那样,您所做的事情本身毫无意义。您可以给表一个material
,但是很难知道给表的一个 array 一个material
意味着什么。