2016-12-15 1 views
0

내 코드 외부에서 배열을 인쇄하려면 어떻게해야합니까?루프 배열이 루프를 벗어남

public func buttonNameSetAndColor(){ 
    let buttonNamesAndColor = [button1, button2, button3, button4, button5, button6, button7, button8, button9, button10] 

    var counter = 0 

    for i in 0...9 { 
     var val = NamePicker() 
     buttonNamesAndColor[i]?.setTitle(val, for: .normal) 
     buttonNamesAndColor[i]?.sizeToFit() 

     // array to find duplicates 
     var buttonValues = ["", "", "", "", "", "", "", "", "", ""] // array for button names 
     buttonValues.insert(val, at: counter) 
     counter += 1 
     print(buttonValues[counter]) 
    } 
} 

내 코드는 하나 하나가 내 buttonValues ​​배열에 삽입 배열의 지정된 때 내 buttonNamesAndColor 배열의 내부 내 버튼에 이름을 부여합니다. 그 배열이 함수 밖에서 출력되는 것을보고 싶습니다.

전체 배열을 인쇄하여보고 싶습니다. 1. 함수 외부에서 호출 할 수 있습니다. 2. 모든 올바른 값을 저장하고 있습니다.

+0

당신은 충분한 정보를 제공하지 않았습니다. 배열을 채우는 클래스의 인스턴스 메서드가 있고 배열을 개체의 속성으로 저장하면 쉽습니다. 함수 예제에서 로컬 변수에 배열을 만들면 함수에서 돌아 오자마자 배열이 사라집니다. 배열을 표시하고 배열을 정의하고 예제 함수로 배열을 만드는 방법을 보여줘야합니다. –

+0

updated @DuncanC – Shane

+0

배열을 클래스의 속성으로 선언하고, 선언을 buttonNameSetAndColor 메서드 밖으로 이동해야합니다. –

답변

0

현재로서는 buttonNameSetAndColor 함수 외부에서 buttonNamesAndColor 배열에 액세스 할 수 없습니다. buttonNameSetAndColor 함수의 끝에서 해당 배열은 더 이상 범위에 없습니다.

아래의 모든 옵션을 사용하면 buttonNameSetAndColor 기능 외의 어레이에 액세스하여 인쇄 할 수 있습니다.

나는 button1, button2, etc.UIButton이라고 가정하고 있지만 다른 유형 인 경우 다음이 작동합니다.

옵션 1 : 클래스/구조체에 배열의 인스턴스 속성을 만듭니다. 여기에서 사용할 수있는 다른 변형이 사용자의 필요에 따라 달라집니다.

class SomeClass { 
    private var buttonNamesAndColor: [UIButton] 

    // or 

    private var _buttonNamesAndColor = [UIButton]() 
    var buttonNamesAndColor: [UIButton] { 
     return _buttonNamesAndColor 
    } 

    // or 

    var buttonNamesAndColor: [UIButton] 

    ... 
} 

옵션 2 : buttonNameSetAndColor 함수에서 배열을 반환.

public func buttonNameSetAndColor() -> [UIButton] { 
    ... 
} 

옵션 3 : 당신의 button 인스턴스가 값 형식 인 경우. 배열을 inout 매개 변수로 전달하십시오. 이 함수에 전달 된 배열의 모든 돌연변이는 함수의 범위를 벗어나 지속됩니다. 4

var buttonNamesAndColor = [button1, button2, button3] // Note "var" instead of "let" 
buttonNamesSetAndColor(&buttonNamesAndColor) // Note "&" symbol 

옵션 : 다음 button 인스턴스가 참조 형식 인 경우는, 당신은 단지 inout없이 buttonNameSetAndColor 함수로 배열을 전달할 수 있습니다

public func buttonNameSetAndColor(_ array: inout [Button]) { 
    ... 
} 

이 옵션은 같은 호출 될 것이다 .

public func buttonNameSetAndColor(_ array: [UIButton]) { 
    ... 
} 

은 다음과 같이 사용됩니다 :

var buttonNamesAndColor = [button1, button2, button3] // Note "var" instead of "let" 
buttonNamesSetAndColor(buttonNamesAndColor) 
0
public func buttonNameSetAndColor(){ 

    let buttonNamesAndColor = [button1, button2, button3, button4, button5, button6, button7, button8, button9, button10] 

    var counter = 0 
    var buttonValues = ["", "", "", "", "", "", "", "", "", ""] // array for button names 

    for i in 0...9 { 
     var val = NamePicker() 
     buttonNamesAndColor[i]?.setTitle(val, for: .normal) 
     buttonNamesAndColor[i]?.sizeToFit() 

     // array to find duplicates 
     buttonValues.insert(val, at: counter) 
     counter += 1 
     print(buttonValues[counter]) 
    } 
} 
관련 문제