在Swift </method>中找不到struct type的成员<method name =“”>

时间:2014-06-12 02:55:12

标签: swift swift-playground

我有以下代码但是当我尝试使用以下x.initial(2).flatten()链接时,我收到编译错误Could not find member flatten

我做错了什么。为了确保我可以继续链接,我会在每个链接方法(如flatten,initial等)后返回自我。

struct $ {

    var resultArray: AnyObject[] = []
    init(array: AnyObject[]) {
        self.resultArray = array
    }

    mutating func first() -> AnyObject? {
        return $.first(self.resultArray)
    }

    mutating func flatten() -> $ {
        self.resultArray = $.flatten(self.resultArray)
        return self
    }

    static func first(array: AnyObject[]) -> AnyObject? {
        if array.isEmpty {
            return nil
        } else {
            return array[0]
        }
    }

    mutating func initial() -> $ {
        return self.initial(1)
    }

    mutating func initial(numElements: Int) -> $ {
        self.resultArray = $.initial(self.resultArray, numElements: numElements)
        return self
    }

    func value() -> AnyObject[] {
        return self.resultArray
    }

    static func flatten(array: AnyObject[]) -> AnyObject[] {
        var resultArr: AnyObject[] = []
        for elem : AnyObject in array {
            if let val = elem as? AnyObject[] {
                resultArr += self.flatten(val)
            } else {
                resultArr += elem
            }
        }
        return resultArr
    }

    static func initial(array: AnyObject[]) -> AnyObject[] {
        return self.initial(array, numElements: 1)
    }

    static func initial(array: AnyObject[], numElements: Int) -> AnyObject[] {
        var result: AnyObject[] = []
        for (index, _) in enumerate((0..array.count - numElements)) {
            result += array[index]
        }
        return result
    }

}

var x = $(array: [[1, 2], 3, [[4]]])
var y = x.initial(2).flatten() //Throws the error

1 个答案:

答案 0 :(得分:3)

这是因为initial返回$的不可变实例。然后,您尝试在其上调用变异方法(flatten)。为了再次变异,你必须将它存储在另一个可以变异的变量中。您也可以将其更改为class而不是struct,因为类是可变的。

注意目前,您收到的错误消息很糟糕,但这就是Swift的生活。