【发布时间】:2014-11-03 19:08:00
【问题描述】:
我熟悉 Obj-c 并熟悉 Swift,但我在 Swift 非常严格的类型检查方面遇到了可怕的问题。举个例子,我想做的就是在下面的 Obj-c 中转换例程:
- (void)receiveIncomingConnectionNotification:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSFileHandle *incomingFileHandle = [userInfo objectForKey:NSFileHandleNotificationFileHandleItem];
if (incomingFileHandle) {
CFDictionaryAddValue(
incomingRequests,
(__bridge const void *)(incomingFileHandle),
(__bridge const void *)((__bridge id)CFHTTPMessageCreateEmpty(kCFAllocatorDefault, TRUE)));
}
}
在 Swift 中这样做:
func receiveIncomingConnectionNotification(notification: NSNotification) {
let userInfo: NSDictionary = notification.userInfo!
let incomingFileHandle: NSFileHandle? = userInfo.objectForKey(NSFileHandleNotificationFileHandleItem) as? NSFileHandle
if (incomingFileHandle != nil) {
CFDictionaryAddValue(self.incomingRequests as CFMutableDictionaryRef, incomingFileHandle, CFHTTPMessageCreateEmpty(kCFAllocatorDefault, true))
}
}
但是 CFDictionaryAddValue 调用不断生成指向“Cannot convert the expression's type '(CFMutableDictionaryRef, NSFileHandle?, Unmanaged<CFHTTPMessage>!' to type BooleanLiteralConvertible!”的“真”参数的错误。
任何人都知道执行此操作的正确方法,或者 BooleanLiteralConvertible 是什么?
【问题讨论】:
-
incomingRequests是如何声明的?
标签: swift core-foundation