arrays - swift 3 : Getting error while joining the reversed() array

标签 arrays swift generics

我有这样的代码:

    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
    }

}

Error: Type of expression is ambiguous without more context

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

编号:https://www.raywenderlich.com/149213/swift-algorithm-club-swift-stack-data-structure

在这里,他们已经成功地在 struct 中完成了 String。

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

最佳答案

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

由于这是您的 description 属性,而您的目标是获取数组的字符串表示形式,因此一种解决方案是将 T 的数组映射到字符串。然后,您可以使用换行符加入该 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
}

关于arrays - swift 3 : Getting error while joining the reversed() array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49216549/

相关文章:

json - Swift 4 Codable 解码数组用引号括起来

java - 当您可以只使用具体类型时,为什么会有带有上限的通配符?

javascript - jQuery:按类选择元素返回 jQuery.fn.init(9) - 无法读取 .val()

swift - 在 iOS 9.0 中通过 WhatsApp 分享

c - C语言中如何改变数组中两个数字的位置?

swift - 如何快速检测哪个 UIView 对象被点击?

java - int 与 int[] 区别 - 泛型内部自动装箱?

Java 泛型 : unbounded wildcard generalization not working past second level

php - 数组的绝对值

c++ - 如何在声明后立即为新初始化的数组赋值