2016-08-09 84 views
0
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") 
     } 
    } 
} 

的最新數據時,它提供錯誤獲取與陣列擴展

使用它的陣列上「無法將類型的值‘()’,以指定類型‘[雙]’」

例如:

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: 我終於解決了它。我感謝所有的幫助。

擴展Array中元素:Equatable {

mutating func fiveHundred() -> [Element] { 

    var tempArr: [Element] = [] 

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

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

}

給我正確的數組。抱歉讓人困惑。因爲你的陣列是out of indexarrCopy[3]錯誤開始250

後,下一次,我必須與我的問題和說明有關問題的

+0

@Hamish使用期望一個函數[雙]我有一個我使用fiveHundred()的雙數組。 – bCM

+0

@Hamish我應該修改fiveHundred返回[雙]?事情是我有不同類型的數組,如[Int]或[String] ... – bCM

+0

您應該使用var。檢查我的回答 –

回答

1

print(arrCopy[i])更加明確給出了一個錯誤,你可以辭退與% 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") 
     } 
    } 
} 
+0

感謝您的回答。看看編輯的問題細節。 – bCM

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") 
     } 
    } 
} 

當然這種擴展將與let工作只與var iables,不 - 常量:

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 
+1

一些改進:'var arrCopy = self'將'arrCopy'設置爲'self'的一個副本,但是它會立即在'arrCopy.reverse()'的下一行代替。如果條件可能更適合作爲後衛。另外,使用「max」鉗制到250會更清晰 – Alexander

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] 
    } 
} 
+0

嗨,我認爲'max'應該是'min'。你需要定義'arrCopy'。 –

+0

@appzYourLife早安:)你能告訴我還沒有喝過咖啡嗎? :) – Alexander

+0

Ty代碼修訂;隨時編輯我的帖子,如果你願意 –