簡體   English   中英

swift中的Objective C協議

[英]objective C protocol in swift

我正在使用Fusuma cocoal pod框架。 但是,我發現他們有一個客觀的C協議,即使整個項目都是用swift編寫的。

@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協議的成員,因為參數的類型不能在objective-C中表示

我正在考慮在協議前刪除@objc但是它說我必須刪除可選的func。 我不介意將它們改為普通的功能,但是,如果我刪除@objc,我想知道應該注意什么

我想要添加的功能是前一個VC的另一個委托功能。 在這種情況下我有3個VC。 第二個是這個人在被解雇后從第三個VC獲取數據。 然后我想添加以下委托函數以允許VC1開始上傳數據

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

@HAS是否說明了@objc給出該協議的最可能原因是因為Swift不允許您使用可選的協議要求方法。 快速做到這一點的方法是:

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*/}
}

當然,我想你有一個默認實現的問題,但是:

您可以使用協議擴展為該協議的任何方法或計算屬性要求提供默認實現。 如果符合類型提供其自己的必需方法或屬性的實現,則將使用該實現而不是擴展提供的實現。 Swift編程語言

這是在游樂場創建的,可以給你一個想法,沒有任何錯誤:

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()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM