簡體   English   中英

從 Objective-C 到 Swift 4 執行選擇器

[英]from Objective-C to Swift 4 perform selector

我是 Swing 和 Objective-C 的新手,我正在嘗試使用 AVCaptureDevice。

我嘗試實現以下代碼,該代碼在 Objective-C 中返回一個 AVCaptureDevice 實例的私有成員。 但是我無法將相同的指令傳輸到 Swift:

CMIOObjectID connectionID;
AVCaptureDevice *main_cam = (AVCaptureDevice*)[cameras objectAtIndex:0];
connectionID = [main_cam performSelector:NSSelectorFromString(@"connectionID") withObject:nil];

主要是因為

main_cam.perform(NSSelectorFromString("connectionID"), with: nil) 

在 Swift 中返回一個

Unmanaged<AnyObject>  

並且不接受強制轉換為 CMIOObjectID。

是否可以在 Swift 中執行操作?

使用@convention(c)

let selector = NSSelectorFromString("connectionID")
let methodIMP: IMP! = main_cam.method(for: selector)
let result: CMIOObjectID? = unsafeBitCast(methodIMP,to:(@convention(c)(AVCaptureDevice?,Selector)-> CMIOObjectID?).self)(main_cam,selector) 

在此處的回答中提供有關此方法的更多詳細信息

你可以試試:

let unmanaged = main_cam.perform(Selector(("connectionID")), with: nil)
if let connectionID = unmanaged?.takeUnretainedValue() as? CMIOObjectID {
    // do your thing
}

您可以在此處閱讀有關如何使用Unmanaged信息

暫無
暫無

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

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