Objective c 在Swift中该系统对象指针代码是否可能?
我被指向了这个objc片段,但我从事的是一个Swift项目Objective c 在Swift中该系统对象指针代码是否可能?,objective-c,cocoa,swift,Objective C,Cocoa,Swift,我被指向了这个objc片段,但我从事的是一个Swift项目 CMIOObjectPropertyAddress prop = { kCMIOHardwarePropertyAllowScreenCaptureDevices, kCMIOObjectPropertyScopeGlobal, kCMIOObjectPropertyElementMaster }; UInt32 allow = 1; CMIOObject
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自动完成速度非常慢。感谢您的回复。可能对其他人有用!快速的数字运算令人发狂,不是吗?谢谢你的回复。可能对其他人有用!快速的数字运算令人发狂,不是吗?