2017-11-26 11 views
-4

실패 : 나는 기능에 분명히 데이터를 전달하기 위해 노력하고있어'String!'에서 전송 관련이없는 유형 '의 ViewController'항상 내가 오류 코드의 조각을 얻고있다

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "commentSegue" { 
      let destVC = segue.destination as! CommentController 

      **destVC.passedValue = valueToPass as? ViewController** 
     } 
    } 

을하지만 문제 캐스팅가 있어요 .. 나는이 같은 게시물이 많이 있다는 것을 압니다. 적어도 지금까지 13 세 이상을 보았을 것입니다.하지만 캐스팅이 좋지 않아서 다른 사람들의 솔루션을 사용할 수 없습니다. 어떤 아이디어?

+1

왜 그것이'String' 될 경우'ViewController'로'valueToPass' 캐스팅 것인가? 더욱이, 그렇게 할 이유가 없다면 암시 적으로 unwrapped 옵션 ('String!')을 사용하지 마십시오 ... –

+0

변수'passedValue'의 선언/정의를 보여줄 수 있습니까? – sasquatch

+0

은 현재 클래스에서 변수를 정의하고 같은 클래스에 값을 할당합니다. 그 후에 Segue를위한 준비에서 값을 전달하십시오. 전송할 필요가 없습니다. – Harish

답변

1

valueToPass 변수를 ViewController으로 전송하는 이유는 무엇입니까? destinationVC.passedValueString 유형 인 경우 String 유형의 값만 전달해야합니다. 또는 전달할 변수의 유형에 대해 잘 모르는 경우 ViewController 대신 String으로 전송할 수 있습니다.

+0

코드 *** 라인에서'as? ViewController'와 당신의 destinationVC 변수의 타입 –

+0

destVC의 타입은 'CommentController'입니다. 그래서 나는 "destVC.passedValue = valueToPass as! CommentController"와 같은 라인을 다시 썼습니다. 그러나 나는 여전히이 오류가 발생합니다 : 'CommentController'유형의 값을 'ViewController!'유형에 할당 할 수 없습니다. 문자열에서 관련없는 CommentController 유형으로의 캐스팅이 항상 실패한다는 경고 –

0

CommentControllerpassedValue 속성이 string 유형 인 경우 캐스팅을 ViewController으로 제거하십시오. passedValue 속성이 ViewController 인 이유는 모르겠지만 그렇다면 valueToPass이보기 컨트롤러인지 확인해야합니다.

편집 : 그것은 캐스트 선택적으로 더 나은 년대 destVC :

if let destVC = segue.destination as? CommentController { 
    destVC.passedValue = valueToPass 
}