如何在swift中向Array添加pop()扩展名?

时间:2014-12-19 02:21:22

标签: swift

如何在swift中扩展数组?

我想说

extension Array
{
    func pop() -> AnyObject
    {
        let out = self.last
        self.removeLast()
        return out
    }
}

但编译器不喜欢self.removeLast()或返回

2 个答案:

答案 0 :(得分:1)

正如@ i40West指出的那样,removeLast 本质上是一个流行音乐。也就是说,如果你想用原始代码修复编译器问题:

  1. 数组可能不包含类引用,因此AnyObject不起作用。您可以将其替换为Any(可以包含类,结构或枚举),但最好返回Element,这是Array类型的实例,无论它实际包含什么。

  2. self.last返回一个可选项(如果数组为空)。您可以选择从pop返回类似于last的可选项,或者仅在类似于removeLast的数组为空时断言。

  3. 由于pop正在修改self(它删除了一个条目)而Array是一个结构,因此您需要将该函数标记为mutating

  4. 因此,假设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
        }
    }