使用数据扩展

时间:2016-08-09 12:55:35

标签: ios swift xcode

extension Array {

    mutating func fiveHundred() {

        var arrCopy = self
        arrCopy = arrCopy.reverse()

        if arrCopy.count > 0 {
            for i in 1..<250 {

                print(arrCopy[i])
                self.append(arrCopy[i])
            }
        } else {
            print("Array is empty")
        }
    }
}

在阵列上使用它时会出现错误

  
    

&#34;无法转换类型&#39;()&#39;的值到指定的类型&#39; [Double]&#39;&#34;

  

例如:

var data: [Int] = [1, 2, 3, 4, ..... all the way to 1000]

data.fiveHundred() // Gives error

编辑:看到它已经<250。抱歉!我在另一个有超过250个条目的数据数组上使用它。

假设此数据阵列有超过250个数据。

EDIT2:这是实际代码

struct Data {
    let array: [Double] = [1.0, 2.0, 3.0, 4.0]
}



printData(Data.array.fiveHundred) // The function printData(val: [Double]) 

EDIT3:我道歉。这些例子和问题非常令人困惑。

extension Array where Element: Equatable {

    mutating func fiveHundred() -> [Element] {

        var arrCopy = self
        arrCopy = arrCopy.reverse()

        if arrCopy.count > 0 {
            for i in 1..<250 {

                print(arrCopy[i])
                self.append(arrCopy[i])
            }
        } else {
            print("Array is empty")
        }
    }
}

这解决了我的一部分问题。另一个问题是我最多只需要250个数据。目前是1000.

我想使用data.fiveHundred()来获取250个数据。

EDIT4: 我终于解决了。我感谢所有的帮助。

extension Array其中Element:Equatable {

mutating func fiveHundred() -> [Element] {

    var tempArr: [Element] = []

    for i in (count-1500)..<count {

        tempArr.append(self[i])
    }
    return tempArr
}

}

给我正确的数组。抱歉让人困惑。下次我必须更清楚地解决有关问题的问题和描述

3 个答案:

答案 0 :(得分:1)

print(arrCopy[i])会出错,因为您的数组是out of index 250

arrCopy[3]错误开始后,您可以使用% arrCopy.count

解除错误
extension Array {

    mutating func fiveHundred() {

        var arrCopy = self
        arrCopy = arrCopy.reverse()

        if arrCopy.count > 0 {
            for i in 1..<250 {

                ///print(arrCopy[i])
                self.append(arrCopy[i%arrCopy.count])
            }
        } else {
            print("Array is empty")
        }
    }
}

答案 1 :(得分:1)

我真的不明白你想要达到什么目标。但如果我理解你需要附加反向数组,不超过250个元素,不包括第一个元素,那么这里就是解决方案:

extension Array {
    mutating func fiveHundred() {

        var arrCopy = self
        arrCopy = arrCopy.reverse()

        if arrCopy.count > 0 {
            let endIndex = arrCopy.count > 250 ? 250 : arrCopy.count
            let subArrCopy = arrCopy[1..<endIndex]
            self.appendContentsOf(subArrCopy)
        } else {
            print("Array is empty")
        }
    }
}

当然,此扩展程序仅适用于var iables,而不适用于let - 常量:

var data: [Double] = [1.0, 2.0, 3.0, 4.0]
data.fiveHundred() //ok
print(data)
//[1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0]
print(data.fiveHundred())
//() - because fiveHundred() is void function, it only mutate your array returning void
print(data)
//[1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0] - fiveHundred() mutated data in previous print call

let data: [Double] = [1.0, 2.0, 3.0, 4.0]
data.fiveHundred() //error

答案 2 :(得分:0)

以下是Shadow Of's answer的改进:

extension Array {
    mutating func fiveHundred() {
        guard self.count > 0 else {
            print("Array is empty")
            return
        }

        let endIndex = min(self.count, 250)
        self += self.reverse()[1..<endIndex]
    }
}