2014-08-21 2 views
0

Xcode 6 베타 5 프로토콜 및 대리인이 먼저 작동하지 않습니다. self.delegate? .printCar()이 호출 될 때 printCar()이 호출되지 않습니다. 지금 프로토콜 & 대리인을 어떻게 사용할 수 있습니까?Swift의 프로토콜 선언 - Xcode 6 베타 5

import UIKit 

protocol communication{ 
    func printCar() 
} 

class car{ 
    var delegate:communication? 

    init(){} 

    func passCar(){ 
     self.delegate?.printCar() 
    } 
} 

class ViewController: UIViewController,communication { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     println("start") 
     var bmw = car() 
     bmw.passCar() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    func printCar(){ 
     println("car") 
    } 
} 
+0

'init()'이 호출 될 때'self.delegate'는'nil'입니다. - 실제로 (뷰 컨트롤러 클래스에 위임자를 설정하지 않았다.) –

+0

나쁜 예제를 작성하여 다시 작성하려고 시도했습니다. – Marco

+0

내 마지막 주석이 여전히 적용됩니다 (아래 답변에도 해당). 대리자를 할당하지 않습니다. 'bmw.delegate = self'와 같은). –

답변

2

당신은 자동차의 delegate 속성을 설정하지 않는, 그래서에 printCar()를 호출 할 객체가 없습니다.

또한 Swift에서 유형 이름에 초기 대문자를 사용하는 것이 좋습니다. (SO의 문법 형광펜이 기대하는 강력한 개념이 있음을 알 수 있습니다.)

아직이 문제와 관련이 없지만 Xcode 6 베타 6을 사용하고 싶을 수도 있습니다.

또 다른 관련없는 문제 : 자동차 클래스의 delegate 속성은 아마도 weak으로 표시되어야합니다. 그렇지 않으면 자동차의 대리자가 자동차를 소유 한 객체 인 경우 메모리 누수가 발생합니다.

+0

'bmw.passCar()'를 호출하기 전에'bmw'의'delegate' 속성에 무언가를 할당해야합니다. 그렇지 않으면'self.delegate?'가'nil'으로 해석되기 때문에 그 메소드에서'self.delegate? .printCar()'호출은 실행되지 않습니다. – rickster

관련 문제