2017-04-21 1 views
0

이 문제를 해결하기 위해 지난 2 일간 검색했습니다. 내가 가진 문제가 발생하고 코드의 일부는 다음과 같습니다iOS 레이블이 텍스트를 문자열 값으로 업데이트하지 않지만 Swift에서 문자열이 올바르게 인쇄됩니다.

test 

Goldfish 

참고 : 코드가 다른 사람의 값을 출력 콘솔에서 다음과 같이 내가 무엇입니까 출력은 [say practiceLabelVar gets the value optional(Goldfish)]

class PracticeTyping: UIViewController { 
    @IBOutlet weak var practiceLabel: UILabel! 

    var practiceLabelVar: String? 
    var x = "test" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    if let newPracticeLabelVar = practiceLabelVar { 

      self.practiceLabel.text = newPracticeLabelVar 

      print ("\(newPracticeLabelVar)") 

      x = newPracticeLabelVar 

     } else { 

      print ("\(x)") 

     }  
    } 
} 

문은 if let 문에 코드를 인쇄합니다.

practiceLabel.text은 변경되지 않고 기본값을 유지합니다.

도와주세요. 감사

+0

어디에서 "금붕어"를 practiceLabelVar에 할당합니까? 그 이유는 그것이 practiceLabelVar 변수에 어떤 값도 할당하지 않았기 때문입니다. – dRAGONAIR

+0

다른보기의 테이블 뷰 컨트롤러에서 Goldfish 값을 할당하려고합니다. { performSegue (withIdentifier : "practiceTypingSegue", 보낸 사람 : 자기) : 나는 버튼에게 @IBAction의 FUNC의 practiceTyping (모든 _ 보낸 사람)를 클릭하면? : PracticeTyping = self.storyboard .instantiateViewController (withIdentifier : "PracticeTypingView 는 PracticeTypingVar하자 ") 같이! 를 PracticeTyping PracticeTypingVar.practiceLabelVar myFavoriteAnimals = [(발신자 AnyObject 등) .tag] .name을 self.present (PracticeTypingVar 애니메이션 : 사실, 완성 : 닐)} – Amr

답변

0

이 마지막으로 알아 낸 실행할 경우 var practiceLabelVar: String?에는 값이 없습니다. 위에서 추가 한 설명을 기반으로 다른보기에서 "금붕어"를 설정하고 언급 한 것처럼 아래에 동일한 코드가 표시됩니다. @IBAction func practiceTyping(_ sender: Any) { performSegue(withIdentifier: "practiceTypingSegue", sender: self) let PracticeTypingVar: PracticeTyping = self.storyboard?.instantiateViewController(withIdentifier: "PracticeTypingView") as! PracticeTyping PracticeTypingVar.practiceLabelVar = myFavoriteAnimals[(sender as AnyObject).tag].name self.present(PracticeTypingVar, animated: true, completion: nil) }

"PracticeTyping"viewController performSegue() 및 self.present (viewController)가 다른 두 번 잘못되었습니다. 먼저 "테스트"를 인쇄하는 이유는 performSegue를 통해 뷰를 표시 할 때 "practiceLabelVar"값을 설정하지 않기 때문입니다. performSegue(withIdentifier: "practiceTypingSegue", sender: self)을 삭제하면 잘 갈 수 있습니다.

+0

정말 고마워요, 효과가있었습니다. – Amr

+0

당신은 환영합니다 :) – dRAGONAIR

0

난 당신이 친절하게 Optional Chaining as an Alternative to Forced Unwrapping

이 코드가 실행이 무엇인지 이해하는 것이 요청하고 싶습니다 잘 그래서 오프 물론 다른 조건 예이 가치되지 않습니다 거기 여부 가치이며, 경우에 그것은 단지 확인 실행됩니다. 어떤 값을 할당하기 위해 시도하고 당신은

참고 작동하는지 이해합니다 : 그것의 일부 값이있는 경우하자가 작동하거나 다른

+0

는 practiceLabelVar 값은에서 유래 tabelView 및 코드는 내가 찾고있는 올바른 값을 인쇄합니다. 내 문제는 이제 practiceLabel.text에서이 값을 얻는 것입니다. 감사합니다. – Amr

관련 문제