我尝试了15分钟试图弄清楚如何使用Swift 2之前编写的书中的代码,在Swift 2的Xcode 7应用程序中。这里的代码是snippit:< / p>
self.coreMotionManager.accelerometerUpdateInterval = 0.3
self.coreMotionManager.startAccelerometerUpdatesToQueue(NSOperationQueue(), withHandler: {
(data: CMAccelerometerData!, error: NSError!) in
if let constVar = error {
println("There was an error")
}
else {
self.xAxisAcceleration = CGFloat(data!.acceleration.x)
} })
我收到错误:&#34;无法调用&#39; startAccelerometerUpdatesToQueue&#39;使用类型&#39;的参数列表(NSOperationQueue,withHandler:(CMAccelerometerData!,NSError!) - &gt; _)&#39;
答案 0 :(得分:3)
问题在于iOS SDK已经进一步审核了可空性,因此那些在您的书中的代码示例中隐式解包的参数现在都是普通的旧选项(即使用File "Code", line 3, in isPalindrome
TypeError: 'int' object has no attribute '__getitem__'.
而不是{{1 }}):
?
或者,更简单地说,让编译器推断出闭包参数的类型:
!
而且,如上所述,由于您使用的是Swift 2,因此您也可以使用coreMotionManager.accelerometerUpdateInterval = 0.3
coreMotionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) { (data: CMAccelerometerData?, error: NSError?) -> Void in
guard data != nil else {
print("There was an error: \(error)")
return
}
self.xAxisAcceleration = CGFloat(data!.acceleration.x)
}
语法。