Swift UnsafeMutableRawPointer returns class 而不是实例
Swift UnsafeMutableRawPointer returns class instead of instance
我希望此代码 return 具有当前所选输入源 ID 的 NSString
。相反,它似乎 return NSString
类 本身之一。
import Foundation
import Carbon
let current = TISCopyCurrentKeyboardInputSource().takeUnretainedValue()
let id = TISGetInputSourceProperty(current, kTISPropertyInputSourceID).load(as: NSString.self)
id.length
当我在我的 macOS 应用程序中 运行 时,我在日志中收到此错误消息:+[__NSCFConstantString _fastCStringContents:]: unrecognized selector sent to class 0x7fff92cf79e8
。我该如何解决这个问题才能获得正确的 returned 值?
TISGetInputSourceProperty()
returns 一个(非托管)原始指针,必须 converted 为 CFStringRef
,而不是 用 load()
取消引用 。然后 CFString
可以桥接到 Swift String
.
let current = TISCopyCurrentKeyboardInputSource().takeRetainedValue()
if let ptr = TISGetInputSourceProperty(current, kTISPropertyInputSourceID) {
let id = Unmanaged<CFString>.fromOpaque(ptr).takeUnretainedValue() as String
print(id) // com.apple.keylayout.German
}
另请注意,takeRetainedValue()
必须用于 TISCopyCurrentKeyboardInputSource()
的 return 值,因为该函数 return 是 (+1) 保留引用,否则您将内存泄漏。
我希望此代码 return 具有当前所选输入源 ID 的 NSString
。相反,它似乎 return NSString
类 本身之一。
import Foundation
import Carbon
let current = TISCopyCurrentKeyboardInputSource().takeUnretainedValue()
let id = TISGetInputSourceProperty(current, kTISPropertyInputSourceID).load(as: NSString.self)
id.length
当我在我的 macOS 应用程序中 运行 时,我在日志中收到此错误消息:+[__NSCFConstantString _fastCStringContents:]: unrecognized selector sent to class 0x7fff92cf79e8
。我该如何解决这个问题才能获得正确的 returned 值?
TISGetInputSourceProperty()
returns 一个(非托管)原始指针,必须 converted 为 CFStringRef
,而不是 用 load()
取消引用 。然后 CFString
可以桥接到 Swift String
.
let current = TISCopyCurrentKeyboardInputSource().takeRetainedValue()
if let ptr = TISGetInputSourceProperty(current, kTISPropertyInputSourceID) {
let id = Unmanaged<CFString>.fromOpaque(ptr).takeUnretainedValue() as String
print(id) // com.apple.keylayout.German
}
另请注意,takeRetainedValue()
必须用于 TISCopyCurrentKeyboardInputSource()
的 return 值,因为该函数 return 是 (+1) 保留引用,否则您将内存泄漏。