2017-11-26 2 views
0

UIAlertViews에 대한 핸들러 선언에 대한 몇 가지 예제를 읽었으며 어쨌든 적절한 구문의 개념을 이해할 수 없습니다. SomeFunction을
- 핸들러 : {된 SomeFuncion의 행동} ("액션"는 무엇을 의미합니까?) - 핸들러 : {_ 인쇄에서 (- 핸들러
: 나는 그들이 다음 중 하나를 수행 몇 가지 예를 본 적이 "Foo!") (다시, "in"의 의미는 무엇입니까?)핸들러 선언이 작동하지 않습니다.

가장 큰 우려는 이러한 것들의 의미를 모른다는 것입니다. 현재 사용 폐쇄 또는 completion handlers하는 방법을 배울 수있는 시간이다, 코멘트에서 언급 한 바와 같이

let answerVCAlert = UIAlertController(title: "Your turn", message: "What's the answer?", preferredStyle: .alert) 
    let submitAnswer = UIAlertAction(title: "Submit", style: .default, handler: submitAnswer(answer: " ")) //grab from textfield 

    let noAnswer = UIAlertAction(title: "No Answer", style: .default, handler: submitAnswer(answer: " ")) 

    func submitAnswer(answer: String) { 
     print ("The string passed is \(answer)") 
     //compare answer to correct answer 
    } 

    func attemptAnswer() { 
     answerVCAlert.addAction(submitAnswer) 
     answerVCAlert.addAction(noAnswer) 
     //answerVCAlert.addTextField //how ??? too many different examples 

     self.present(answerVCAlert, animated: true, completion: nil) 
    } 
+0

어디에서 attempAnswer 메소드를 호출합니까? –

+2

* "이러한 것들의 의미를 모르겠습니다."* - [Closures] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures)를 읽고 싶습니다. html) 장을 참조하십시오. –

+0

나는 클로저를 읽었으며, 클로저가 무엇인지 개념을 알고 있으며 자바의 람다 식에 익숙하다. 일반적으로 나를 쫓아 버리는 것은 구문의 일부입니다 (특히 "action"또는 "in"과 같은 단어를 사용하는 경우, 어디에서 동작을 정의 했는가, 또는 무엇을 의미합니까?). 미안 OP에서 불분명하다면 개념이 무엇인지 알지만 문법은 모든 사람이이 구문을 사용하는 예제를 제공하기 때문에 나에게 익숙합니다. –

답변

1

"자신의 초기 값 내에서 사용되는 변수"와 나는 다음과 같은 오류가 그러나 첫 번째 스타일을 사용하려고 해요 . 시간을 잘 보냈습니다.

여기에는 텍스트 필드가 포함 된 작업 코드 (일부 변경 사항이 있지만 약간의 변경 사항이 있음)가 있습니다. 경고 텍스트 필드에서 텍스트를 가져 오는 좋은 Swift 3 예제는 this SO answer입니다. 아래 코드에서 Swift 4 구문이 변경되었습니다.

완성 처리기를 더 잘 이해할 수 있도록 코드를 들여 썼습니다. 나는 인라인 코멘트도 추가했다. 결과

// I changed the name of your alert controller for brevity 

let alertVC = UIAlertController(
    title: "Your turn", 
    message: "What's the answer?", 
    preferredStyle: .alert) 

// Add a textfield called answerText. You may not want the placeholder to be blank. 

alertVC.addTextField(configurationHandler: {(answerText: UITextField!) in 
    answerText.placeholder = "Default answer" 
}) 

// Add a Submit button that will call submitAnswer() 

let submitAnswer = UIAlertAction(
    title: "Submit", 
    style: .default, 
    handler: { action -> Void in 
     self.submitAnswer(alertVC.textFields![0]) 
    }) 
alertVC.addAction(submitAnswer) 

// Add a No Answer button that will call noAnswer() 
// NOTE: I changed this to be style of cancel... check out how it's rendered. 

let noAnswer = UIAlertAction(
    title: "No Answer", 
    style: .cancel, 
    handler: { action -> Void in 
     self.noAnswer() 
    }) 
alertVC.addAction(noAnswer) 

// I think you *want* everybody to try to answer, so let's make that the preferred action. 

alertVC.preferredAction = submitAnswer 
present(
    alertVC, 
    animated: true, 
    completion: nil) 

그리고 여기 : 여기

는 경고의 내가 만든 변경 중

func submitAnswer(_ answer: String) { 
    print ("The answer is \(answer)") 
    //compare answer to correct answer 
} 
func noAnswer() { 
    print ("Cancel was tapped.") 
} 

은 다음과 같습니다

  • .cancel.default에서 하나 개의 동작의 스타일을 변경 그게 무슨 일을하는지 당신에게 알리기 위해서 요.
  • 완료 핸들러 호출에 self을 추가했습니다. 필요합니다.
  • submitAnswer()의 서명을 더 이상 매개 변수 레이블이 필요하지 않게 변경했습니다. 그렇게 빨리.
  • noAnswer 작업 호출을 submitAnswer()에서 noAnswer()으로 변경하여 사용자가 탭한 작업을 구분합니다.
+0

안녕하세요. 코드를 보내 주셔서 감사합니다. 정말 그런 식으로 부수는 데 도움이됩니다. 나는 단지 질문, 왜 또는 무엇이 "행동 -> 무효"를 가지고 있습니다. 어디에서 4 가지가 의미하는 바를 정확히 읽을 수 있습니까? 나는 무효라는 것은 아무것도 반환하지 않는다는 것을 의미한다. 그러나 "action"과 "in"은 정말 나를 혼란스럽게합니다. 정의 된 부분은 어디입니까? 그들은 정확한 단어입니까 아니면 변수입니까? 나는 그 단어를 다른 것으로 바꿀 수 있습니까? –

+0

그것은 클로저 또는 완료 핸들러를 이해하는 데 필요한 부분입니다. @Martin_R 링크는 내가 도와야 할 링크를 제공했습니다.내 링크에서 완료 핸들러 섹션까지 스크롤하십시오. 나는 이것에 대한 전문가가 아니기 때문에'action -> void in '에 대한 내 자신의 설명을 삭제했다. 대부분의 경우 내 코드에는 핸들러가 필요하지 않습니다. (단지'nil'을 사용합니다.) 그리고 내가 여러분에게 준 링크로 작업 할 때가 있습니다. 그것은 매우 강력하고 (이상한) 구문입니다 - 매개 변수로 함수를 경고 컨트롤러에 전달하는 것입니다. 아직 이해하고 있습니다! – dfd

관련 문제