gpt4 book ai didi

swift - 用父类(super class)约束扩展

转载 作者:行者123 更新时间:2023-11-28 13:24:27 25 4
gpt4 key购买 nike

Swift 无法将我的 table 变成家具。我是否必须在 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>'

最佳答案

所以这里发生了很多事情:

  • 你说的是 var material,但当你说 material() 时,你试图像调用函数一样调用它。

  • 您的 var material 是一个字符串,但您忽略了从它的 getter 返回一个字符串。

  • 您不能说 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 ,但很难理解为表的数组提供 Material 意味着什么。

关于swift - 用父类(super class)约束扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58631408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com