2016-12-09 1 views
0

프로그래밍에 익숙하지 않아 신속하게 작성한 함수에서 변수 데이터를 다시 가져올 수있는 방법을 찾지 못했습니다. 변수를 반환하려고했지만 컴파일러에서 오류가 발생합니다.Swift에서 함수 밖의 함수 내에서 변수 선언을 사용하려면 어떻게해야합니까?

class ViewController: UIViewController { 


    @IBOutlet var textField: UITextField! 

    var userName = String() 

    @IBAction func returnPressed(_ sender: Any) { 

     userName = textField.text! //user input will = userName 
     print("return pressed inside textfield") 
     print("User name set to \(userName)") 

    self.view.endEditing(true) //hides keyboard 
     return (userName) 
    } 

반환 버튼을 눌러 기능을 활성화합니다. 변수 userName은 텍스트 필드 내의 사용자 입력과 같습니다.

문제는이 함수 외부에서 더 이상 변수 userName을 호출 할 수없고 이전에 저장 한 사용자 입력 값을받을 수 없다는 것입니다. 그리고 나는 독서와 같이 작동하는 "복귀"를 얻는 것처럼 보입니다.

+1

사용자 이름은 클래스의 ViewController의 속성입니다. 이 값을 반환 할 필요가 없습니다. –

+0

또한 returnPressed 함수에는 returnType이 없습니다. 아무것도 반환하려고하면 컴파일러에서 비명을 지르는 것은 분명합니다. –

+0

프로그래밍을 처음 사용하는 경우 [여기] (http : /stackoverflow.com/documentation/swift/topics) –

답변

0

먼저 작동하지 않습니다 확신 말을하기 전에 시도하시기 바랍니다 것을 캡처 한 것이다 userName은 클래스 ViewController의 내부 변수이며 모든 함수에서 액세스 할 수 있습니다. viewDidLoad, viewWillAppear 또는 클래스의 사용자 지정 함수와 같은 일부 함수 내에서 변수에 액세스해야합니다. 당신이 명시 적 액세스 수준 자신을 지정하지 않은 경우

어떤 기능을 확인하고 내부의 기본 액세스 수준이 (몇 가지 특정 예외) 코드에서 변수

func test() { 
    //access here userName 
} 

모든 개체에 액세스 할 수 있습니다. 따라서 많은 경우에 코드에 명시적인 액세스 수준을 지정할 필요가 없습니다.

자세한 내용은 Access Controls을 참조하십시오.

또한 반환 유형이없는 버튼의 IBAction에서 뭔가를 반환합니다. 컴파일러 오류가 발생합니다.

일반적으로 텍스트 필드의 반환은 UITextFieldDelegate에 의해 처리됩니다. here을 참조하십시오.

스위프트 3의 위임 방법은 당신이 새로운 값은 클래스 내에서 어디서나 액세스 할 수있는 값의 수정하면

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    return true 
} 
0

함수를 반환하는 것으로 함수를 선언하지 않으므로 함수의 return 문에서 아무것도 수행하지 않습니다.

func returnPressed(_ sender : Any) -> String 

문자열을 반환하는 함수입니다.

이 경우 함수를 수동으로 호출하여 함수의 결과를 캡처하지 않기 때문에 return 문이 필요하지 않습니다. 당신이 반환을 누른 후 코드에서 다른 사용자 이름 값을 인쇄 할 경우

, 변수는 값이, 당신이 모든 :)

관련 문제