【问题标题】:Swift 3: Getting error while joining the reversed() arraySwift 3:加入 reversed() 数组时出错
【发布时间】:2018-08-19 08:53:28
【问题描述】:

我有这样的代码:

    class Stack<T>: CustomStringConvertible {

    fileprivate var array: [T] = []

    func pop() -> T? {
        let popItem = self.array.popLast()
        print("POP ITEM : \(popItem)")
        return popItem
    }

    func push(item: T) {
        print("PUSH ITEM : \(item)")
        array.append(item)
    }

    var isEmpty: Bool {
        return self.array.isEmpty
    }

    var count: Int {
        return self.array.count
    }

    var description: String {
        let topDivider = "### STACK ###\n"
        let bottomDivider = "\n############\n"
        let stackElements = self.array.reversed().joined(separator: "\n") // GETTING ERROR
        return topDivider + stackElements + bottomDivider
    }

}

错误:表达式类型不明确,没有更多上下文

我无法加入那个反向数组。

参考:https://www.raywenderlich.com/149213/swift-algorithm-club-swift-stack-data-structure

在这里,他们已经成功地用 String 完成了结构。

我能知道我如何在这里实现同样的目标吗?

【问题讨论】:

  • 你怎么知道'array'是由字符串组成的?
  • @ElTomato :它是通用的,但在描述中我需要将它们转换为字符串。我该怎么做?

标签: arrays swift generics


【解决方案1】:

问题在于joined 函数要求分隔符与要连接的值的数据类型相同。由于self.arrayT 的数组,因此您不能将String 作为分隔符传递。这种不匹配导致了错误。

由于这是您的description 属性,并且您的目标是获取数组的字符串表示形式,因此一种解决方案是将T 的数组映射到String 的数组。然后,您可以使用换行符加入 String 数组。

将某些内容转换为String 的一种方法是对其调用description 方法。但要做到这一点,您需要将T 限制为仅提供来自CustomStringConvertibledescription 方法的那些类型。

将您的类声明更改为:

class Stack<T:CustomStringConvertible>: CustomStringConvertible {

然后将您的description 属性发送到:

var description: String {
    let topDivider = "### STACK ###\n"
    let bottomDivider = "\n############\n"
    let stackElements = self.array.reversed().map { $0.description }.joined(separator: "\n")
    return topDivider + stackElements + bottomDivider
}

【讨论】:

  • 我试过 'Stack: CustomStringConvertible' 。它奏效了
【解决方案2】:

将您的泛型类型T 映射到String,然后应用joined() 函数。

joined 仅适用于 String 类型的元素,这里编译器不知道 T 的类型。

let stackElements = self.array.map{"\($0)"}.reversed().joined(separator: "\n")

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多