Objective c 在Swift中该系统对象指针代码是否可能?

Objective c 在Swift中该系统对象指针代码是否可能?,objective-c,cocoa,swift,Objective C,Cocoa,Swift,我被指向了这个objc片段,但我从事的是一个Swift项目 CMIOObjectPropertyAddress prop = { kCMIOHardwarePropertyAllowScreenCaptureDevices, kCMIOObjectPropertyScopeGlobal, kCMIOObjectPropertyElementMaster }; UInt32 allow = 1; CMIOObject

我被指向了这个objc片段,但我从事的是一个Swift项目

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

CMIOObjectSetPropertyData(kCMIOObjectSystemObject, &prop, 0, NULL, sizeof(allow), &allow);
然后我试着改写成Swift:

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: 无法分配给仅获取属性“prop”


C结构转换为Swift结构。使用隐式成员初始值设定项:

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

最酷的部分是当您键入CMIOObjectPropertyAddress时,代码完成将为您提供其余部分。

C结构转换为Swift结构。使用隐式成员初始值设定项:

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

最酷的部分是当您键入CMIOObjectPropertyAddress时,代码完成将为您提供其余内容。

您是对的,刚刚在这一秒正确运行了它。事实证明,我还必须纠正一些类型。以下是完整的译文:

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

你说得对,就在这一秒让它正常运转。事实证明,我还必须纠正一些类型。以下是完整的译文:

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

哦,忘了添加了,我通过桥接一个只做上述工作的objective-c类来实现它。我想避免这种情况,因为桥接头使得Xcode自动完成速度非常慢。哦,忘了添加,我是通过桥接一个只做上述工作的objective-c类来实现的。我想避免这种情况,因为桥接头使Xcode自动完成速度非常慢。感谢您的回复。可能对其他人有用!快速的数字运算令人发狂,不是吗?谢谢你的回复。可能对其他人有用!快速的数字运算令人发狂,不是吗?