iOS swift测试1.2版错误,

μολ*_*αβέ 0 ios swift

原始代码

  // 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

谢谢你的帮助

Bri*_*kel 5

在这种情况下,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)