2016-09-16 7 views
3

나는 Fusuma cocoal pod framework을 사용하고 있습니다. 그러나 전체 프로젝트가 신속하게 작성되었다고 생각하는 경우에도 객관적인 C 프로토콜을 가지고있는 것으로 나타났습니다.신속한 목표 C 프로토콜

@objc public protocol FusumaDelegate: class { 

    func fusumaImageSelected(image: UIImage) 
    optional func fusumaDismissedWithImage(image: UIImage) 
    func fusumaVideoCompleted(withFileURL fileURL: NSURL) 
    func fusumaCameraRollUnauthorized() 

    optional func fusumaClosed() 
} 

프로토콜에 다른 기능을 추가하고 싶습니다. 그러나, 나는 매개 변수의 유형이 표현 될 수 없기 때문에

방법은 @objc 프로토콜의 멤버가 될 수 없습니다이 warining를 얻고 목적-C

나는 @objc을 제거하는 방법에 대한 생각하고 프로토콜 앞에 있지만 옵션 기능을 제거해야한다고 말합니다. 그러나 나는 정상적인 기능으로 변경하는 것을 잊어 버린다. 그러나 @objc를 제거하면 내가 알아야 할 것이 무엇인지 알고 싶다.

내가 추가하려고하는 기능은 이전 VC의 또 다른 위임 기능이다. 이 경우에는 3 개의 VC가 있습니다. 이 중 하나 인 두 번째 것은 해고 된 후 세 번째 VC의 데이터를 가져옵니다. 그럼 난 VC1가

extension FusumaViewController: VC3Delegate { 
    func readyToUploadPost(postUpload: PostUpload) { 
    delegate_?.readyToUploadPost_Fusuma(postUpload) 
} 
+0

가능성이 그들이 목표 - C의 동적 기능이 필요합니다. 스위프트에서는 그렇게 할 수 없습니다. –

+0

추가하려고하는 기능은 무엇입니까? –

+0

@MikeTaverne, 질문에 대답하는 업데이트 된 질문을 참조하십시오. 선택적 func을 삭제하고 objC를 제거하려고 시도했지만, 매개 변수가 내부 형식을 사용하기 때문에 Method called declared public이 될 수 없다는 오류가 발생합니다. 그래서 나는 그것을 처리하기 위해 완전히 별개의 프로토콜을 만드는 것으로 끝났다. 그것이 올바른 방법인지 확실하지 않습니다. 해킹처럼 보입니다 – user172902

답변

2

가 @HAS이 프로토콜은 @objc 주어진 스위프트는 선택적으로 사용하는 것을 허용하지 않기 때문입니다 된 가능성이 가장 높은 이유를 밝혔습니다 데이터를 업로드 할 수 있도록 다음과 같은 위임 기능을 추가 할 프로토콜 요구 사항 방법. 이 일의 빠른 방법은 다음과 같습니다

당연히
public protocol FusumaDelegate: class { 

    func fusumaImageSelected(image: UIImage) 
    func fusumaVideoCompleted(withFileURL fileURL: NSURL) 
    func fusumaCameraRollUnauthorized() 
} 

extension FusumaDelegate { 
    func fusumaDismissedWithImage(image: UIImage) {/*Default Implementation*/} 
    func fusumaClosed() {/*Default Implementation*/} 
} 

, 당신은 기본 구현의 문제가, 나는 가정,하지만 :

당신은에 대한 기본 구현을 제공하는 프로토콜 확장을 사용할 수 있습니다

해당 프로토콜의 모든 메소드 또는 계산 된 특성 요구 사항. 준수 유형이 필수 메소드 또는 특성의 자체 구현을 제공하는 경우, 해당 구현은 확장이 제공하는 대신 사용됩니다.

The Swift Programming Language 오류없이, 당신에게 아이디어를주고 놀이터에서 만든 :

public protocol FusumaDelegate: class { 
    func fusumaImageSelected(image: UIImage) 
    func fusumaVideoCompleted(withFileURL fileURL: NSURL) 
    func fusumaCameraRollUnauthorized() 
} 

extension FusumaDelegate { 
    func fusumaDismissedWithImage(image: UIImage) {} 
    func fusumaClosed() {} 
} 


class Test : UIViewController, FusumaDelegate { 
    func fusumaImageSelected(image: UIImage) { 
     //do stuff 
    } 

    func fusumaVideoCompleted(withFileURL fileURL: NSURL) { 
     //do stuff 
    } 

    func fusumaCameraRollUnauthorized() { 
     //do stuff 
    } 

    func fusumaDismissedWithImage(image: UIImage) { 
     //do stuff 
     self.fusumaClosed() 
    } 
}