我有这样的代码:
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.array
是 T
的数组,您不能将 String
作为分隔符传递。这种不匹配导致了错误。
由于这是您的 description
属性,而您的目标是获取数组的字符串表示形式,因此一种解决方案是将 T
的数组映射到字符串
。然后,您可以使用换行符加入该 String
数组。
将某些内容转换为 String
的一种方法是对其调用 description
方法。但要做到这一点,您需要将 T
限制为仅提供来自 CustomStringConvertible
的 description
方法的类型。
将您的类声明更改为:
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/