【问题标题】:Inserting element in [String] array changes its type在 [String] 数组中插入元素会更改其类型
【发布时间】:2021-04-16 06:59:31
【问题描述】:
struct Numbers {
    var list: [String] = [
        "one",
        "two",
        "three"
    ]
    
    func returnList() -> [String] {
        var sortedList: [String] = self.list.sorted()
        var finalList: [String] = sortedList.insert("four", at: 0)
        return finalList
    }
}

finalList 被推断为 () 而不是 [String]。如果我指定类型 [String] 我会收到消息:

无法将类型“()”的值转换为指定类型“[String]”

到底为什么?

【问题讨论】:

  • 因为insert 返回Void 又名() 并就地修改数组?只需删除finalList 变量并返回sortedList
  • 参见this very similar question 了解append 而不是insert,或this question 了解subtract

标签: swift


【解决方案1】:

您误解了错误消息。

问题是sortedList.insert 没有返回值。 (我们表示它返回()。)因此它不能分配给finalList: [String],原因很简单,它不是[String]

所以改变

var sortedList: [String] = self.list.sorted()
var finalList: [String] = sortedList.insert("four", at: 0)
return finalList

var sortedList: [String] = self.list.sorted()
sortedList.insert("four", at: 0)
return sortedList

【讨论】:

  • 我承认,知道哪些 Swift 方法返回值以及哪些方法直接在可变目标上操作可能会有点令人困惑。您的代码体现了两者。
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2020-01-12
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多