Swift 2:二元运算符'=='不能应用于类型'()?'的操作数和“布尔”
问题描述:
我Xcode更新7测试版,我的SWIFT代码转换为斯威夫特2后,我得到了我想不通这两个错误..Swift 2:二元运算符'=='不能应用于类型'()?'的操作数和“布尔”
呼叫可以扔掉,但是没有标明'try'并且错误不被处理
二元运算符'=='不能应用于类型'()?'的操作数和'布尔'
我的代码在这里。
if self.socket?.connectToHost(host, onPort: port, viaInterface: interfaceName, withTimeout: 10) == true {
// connecting
} else {
// error
let delay = 1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
self._connect()
})
}
任何想法可能是什么问题?
快照:
答
基础上CocoaAsyncSocket框架是如何在斯威夫特使用,功能connectToHost:onPort:viaInterface:withTimeout:
没有返回值。相反,它只会抛出。因此,错误的含义是Void
(无返回值)无法与Bool
进行比较。
及其在夫特声明为:
func connectToHost(host: String!, onPort port: UInt16, viaInterface interface: String!, withTimeout timeout: NSTimeInterval) throws
与目的-C中使用时,其中的声明这不同于它的声明:
- (BOOL)connectToHost:(NSString *)hostname onPort:(UInt16)port withTimeout:(NSTimeInterval)timeout
顺便说一句,在Objective-C,则可以处理nil
,就好像它是一个布尔值,非零值被评估为TRUE
,但这些可能性已从Swift中删除,因为它们是常见的错误来源。
要处理该错误,需要以下形式称为do-try-catch。这是调整你的代码示例:(!myBool)
do {
try self.socket?.connectToHost(host, onPort: port, viaInterface: interfaceName, withTimeout: 10)
// connecting
} catch let error as NSError {
// Handle the error here.
let delay = 1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
self._connect()
})
}
布尔是/否...'如果{...}'或'如果(myBool){...}' –
对于记录,你应该避免'== true'。这是多余的。只要使用'if condition'。 – Arc676