如何在swift中扩展数组?
我想说
extension Array
{
func pop() -> AnyObject
{
let out = self.last
self.removeLast()
return out
}
}
但编译器不喜欢self.removeLast()或返回
答案 0 :(得分:1)
正如@ i40West指出的那样,removeLast
本质上是一个流行音乐。也就是说,如果你想用原始代码修复编译器问题:
数组可能不包含类引用,因此AnyObject
不起作用。您可以将其替换为Any
(可以包含类,结构或枚举),但最好返回Element
,这是Array
类型的实例,无论它实际包含什么。
self.last
返回一个可选项(如果数组为空)。您可以选择从pop
返回类似于last
的可选项,或者仅在类似于removeLast
的数组为空时断言。
由于pop
正在修改self
(它删除了一个条目)而Array
是一个结构,因此您需要将该函数标记为mutating
。
因此,假设removeLast
未返回值的完整版本可能类似于:
extension Array {
mutating func pop() -> Element {
precondition(self.startIndex != self.endIndex, "Attempt to pop from an empty array")
let out = self.last
self.removeLast()
return out!
}
}
答案 1 :(得分:0)
我认为你不应该使用AnyObject。你学过仿制药吗? 尝试:
extension Array { func pop() -> T { let out = self.last self.removeLast() return out } }