2014-10-05 115 views
0

我昨天問了一個問題,並收到了一個很好的答案,解決了我的大部分問題。我試圖將具體的數值與11種顏色配對,分配增量爲12,而形狀爲每12個增量重複一次。看看這個代碼,讓我知道如果有什麼我可以改變

ex: 0:black:circle, 1:black:cross, 2:black:star...12 
    0:brown:circle, 1:brown:cross, 2:brown:star...12 
    0:red:circle, 1:red:cross, 2:red:star...12 

依此類推,直到每個數字被賦予一個顏色和形狀。下面的代碼是這樣做的。但它以我沒有想到的方式來做,輸出結果如下。

struct ValueStruct { 
var numValue: Int 
var color: String 
var shape: String 

init(numValue: Int, color: String, shape: String) { 
    self.numValue = numValue 
    self.color = color 
    self.shape = shape 
    } 
} 

var startingNumValue = 0 
let colorsArray = ["Black", "Brown", "Red", "Yellow", "Orange", "Green", "Grey", "Blue", "Purple", "Pink", "White"] 
let shapesArray = ["Circle", "Cross", "Star", "Rectangle", "Triangle", "Square", "Heart", "Crown", "Line", "Diamond", "Ellipse", "Sun"] 


var containingArray:[ValueStruct] = [] 

for colorItems in colorsArray { 
for shapeItems in shapesArray { 
    containingArray.append(ValueStruct(numValue: startingNumValue, color: colorItems, shape: shapeItems)) 
    startingNumValue += 1 
} 

這是什麼輸出在操場上看起來像這樣的幾個問題。

1)這是做這個最簡潔的方法嗎?正常循環的輸出通常都在一個窗口中,看起來這是以停止的方式循環,直到完成爲止。

2)有沒有辦法在startingNumValue上設置一個上限我只需要去128就可以了,以後我會擔心可能的錯誤。

3)最後,這可以在遊樂場中正常工作,但從for colorItems in colorsArray行開始,在常規項目中會產生一個Statements are not allowed at the top level錯誤,有關處理該錯誤的最佳方法的任何建議? enter image description here

+1

Re#2:11種顏色和12種共享使得11 * 12 = 132種可能的組合。你期望如何編碼只有128個數字? – 2014-10-05 13:30:50

+0

我明白,我只是想盡可能停止計數。 – 2014-10-05 13:45:28

回答

2

我添加了一個if語句來將您的數組限制爲128個項目。在一個項目中,變量賦值以外的代碼需要在函數中。試試這個:

import UIKit 

struct ValueStruct { 
    var numValue: Int 
    var color: String 
    var shape: String 

    init(numValue: Int, color: String, shape: String) { 
     self.numValue = numValue 
     self.color = color 
     self.shape = shape 
    } 
} 

class ViewController: UIViewController, UITableViewDelegate { 

    var startingNumValue = 0 
    let colorsArray = ["Black", "Brown", "Red", "Yellow", "Orange", "Green", "Grey", "Blue", "Purple", "Pink", "White"] 
    let shapesArray = ["Circle", "Cross", "Star", "Rectangle", "Triangle", "Square", "Heart", "Crown", "Line", "Diamond", "Ellipse", "Sun"] 
    var containingArray:[ValueStruct] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     for colorItems in colorsArray { 
      for shapeItems in shapesArray { 
       if startingNumValue < 128 { 
        containingArray.append(ValueStruct(numValue: startingNumValue, color: colorItems, shape: shapeItems)) 
        startingNumValue += 1 
       } 
      } 
     } 
     println(startingNumValue) 
    } 
} 
+0

真棒這個作品完全謝謝你。 – 2014-10-05 13:53:34

+0

不客氣。你也可以接受答案。單擊投票上/下箭頭旁邊的複選標記。 – 2014-10-05 13:54:54

+0

只需等待,看看是否有其他人有任何添加 – 2014-10-05 14:17:05

1

另一種選擇是使用單一的環路,並使用模算術從數組來選擇,如下:

for i in 0..<128 { 
    let colorIndex = i % (colorsArray.count) 
    let shapesIndex = i/colorsArray.count 
    containingArray.append(ValueStruct(numValue: i, color: colorsArray[colorIndex], shape: shapesArray[shapesIndex])) 
} 

但要區分變硬這一點,你會需要注意你不要超越形狀陣列的範圍。

相關問題