原始代码
// add a tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
let gestureRecognizers = NSMutableArray()
gestureRecognizers.addObject(tapGesture)
if let existingGestureRecognizers = sceneView.gestureRecognizers {
gestureRecognizers.addObjectsFromArray(existingGestureRecognizers)
}
sceneView.gestureRecognizers = gestureRecognizers
error -->> sceneView.gestureRecognizers = gestureRecognizers
Run Code Online (Sandbox Code Playgroud)
很遗憾地更新到swift 1.2的最新版本
'NSMutableArray' is not convertible to '[AnyObject]'; did you mean to use 'as!' to force downcast?
Run Code Online (Sandbox Code Playgroud)
它想要改变行
sceneView.gestureRecognizers = gestureRecognizers as! [AnyObject]
Run Code Online (Sandbox Code Playgroud)
在更改接受后,我现在收到此错误
Cannot assign a value of type '[AnyObject]' to a value of type '[AnyObject]?'
Run Code Online (Sandbox Code Playgroud)
迅速的迁移者没有帮助,发行说明也没有.
这不是我的代码,因为我不想搞砸我自己的回购,所以这是一个来自github的项目.
https://github.com/ryanshelby/Stonehenge
谢谢你的帮助
在这种情况下,Swift迁移器是错误的.Swift 1.2不再支持隐式强制NSArray转换[AnyObject],因此它正确地确定[AnyObject]需要强制转换,但它错误地将其添加为不安全的强制转换而不是安全的强制转换.我假设不安全的强制转换是无效的代码并且应该生成错误,但它显示的消息不正确.
以下行应该给出所需的结果,但是你可能想要修改代码以避免以下内容NSMutableArray:
sceneView.gestureRecognizers = gestureRecognizers as [AnyObject]
Run Code Online (Sandbox Code Playgroud)
避免这种情况的简明方法是获取原始数组或创建新数组,插入项目并重新分配.
var gestureRecognizers = screenView.gestureRecognizers ?? []
gestureRecognizers.insert(tapGesture, atIndex: 0)
screenView.gestureRecognizers = gestureRecognizers
Run Code Online (Sandbox Code Playgroud)
也就是说,UIView已经有一个用于添加单个手势识别器的API:
screenView.addGestureRecognizer(tapGesture)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
543 次 |
| 最近记录: |