2015-05-06 54 views
1

我被指出這個objc片段from WWDC 14,但我在一個Swift項目上工作。這個系統對象指針代碼是否可以在Swift中使用?

CMIOObjectPropertyAddress prop = { 
    kCMIOHardwarePropertyAllowScreenCaptureDevices, 
    kCMIOObjectPropertyScopeGlobal, 
    kCMIOObjectPropertyElementMaster 
}; 
UInt32      allow = 1; 

CMIOObjectSetPropertyData(kCMIOObjectSystemObject, &prop, 0, NULL, sizeof(allow), &allow); 

我又試圖改寫斯威夫特:

var prop : CMIOObjectPropertyAddress { 
    kCMIOHardwarePropertyAllowScreenCaptureDevices 
    kCMIOObjectPropertyScopeGlobal 
    kCMIOObjectPropertyElementMaster 
} 

var allow:UInt32 = 1 
CMIOObjectSetPropertyData(kCMIOObjectSystemObject, &prop, 0, nil, sizeof(UInt32), &allow) 

但它甚至不進行驗證。我不知道如何翻譯CMIOObjectPropertyAddress結構。 Xcode中說

/Users/mortenjust/Dropbox/hack/learning/screenrec/screenrec/deleteme.swift:32:61: 不能分配給GET-唯一的財產 '託'

+0

哦,忘了補充,我通過橋接一個只有上面的東西的Objective-C類來工作。我想**避免**,因爲橋接頭讓Xcode自動完成非常慢。 –

回答

3

AC結構翻譯爲Swift結構。使用隱按成員初始化:

var prop = CMIOObjectPropertyAddress(
     mSelector: UInt32(kCMIOHardwarePropertyAllowScreenCaptureDevices), 
     mScope: UInt32(kCMIOObjectPropertyScopeGlobal), 
     mElement: UInt32(kCMIOObjectPropertyElementMaster)) 

涼爽的部分是,當你鍵入CMIOObjectPropertyAddress(,代碼完成給你休息。

3

你是對的,剛剛得到它跑在這一秒。原來,我也必須糾正一些類型。這裏是完整的翻譯:

 var prop = CMIOObjectPropertyAddress(
     mSelector: CMIOObjectPropertySelector(kCMIOHardwarePropertyAllowScreenCaptureDevices), 
     mScope: CMIOObjectPropertyScope(kCMIOObjectPropertyScopeGlobal), 
     mElement: CMIOObjectPropertyElement(kCMIOObjectPropertyElementMaster)) 

    var allow : UInt32 = 1 
    var dataSize : UInt32 = 4 
    var zero : UInt32 = 0 
    CMIOObjectSetPropertyData(CMIOObjectID(kCMIOObjectSystemObject), &prop, zero, nil, dataSize, &allow) 

    var session = AVCaptureSession() 
    session.sessionPreset = AVCaptureSessionPresetHigh 

    var devices = AVCaptureDevice.devices() 
    for device in AVCaptureDevice.devices() { 
     println(device) 
    } 
+0

感謝您回報。可能對別人有用! (Swift數字令人發狂,是不是?) – matt

相關問題