2014-10-05 1 views
0

어제 질문을했고 내 문제의 대부분을 해결하는 멋진 답변을 받았습니다. 12 개의 증분으로 할당 된 11 개의 색상과 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 개의 숫자로 어떻게 인코딩 할 예정입니까? –

+0

나는 가능하다면 그곳에서 카운트를 멈추려 고하고 있다는 것을 이해한다. –

답변

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

굉장히 완벽하게 작동합니다. –

+0

당신은 오신 것을 환영합니다. 당신은 또한 대답을 받아 들일 수 있습니다. 투표 위/아래 화살표 바로 아래의 체크 표시를 클릭하십시오. –

+0

추가 할 사람이 있는지 만 기다리는 중입니다. –

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

그러나에

이 경우-강화, 당신은 것 당신이 모양의 경계를 넘어 가지 않는다는 것을 지켜봐야합니다 .Array.

관련 문제