gpt4 book ai didi

iOS swift 测试 1.2 版本错误,

转载 作者:行者123 更新时间:2023-11-28 09:34:56 24 4
gpt4 key购买 nike

原始代码

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

不幸更新到最新版本的swift 1.2

'NSMutableArray' is not convertible to '[AnyObject]'; did you mean to use 'as!' to force downcast?

它想把行改成

sceneView.gestureRecognizers = gestureRecognizers as! [AnyObject]

更改接受后,我现在收到此错误

Cannot assign a value of type '[AnyObject]' to a value of type '[AnyObject]?'

swift migrator 没有帮助,发行说明也没有帮助。

这不是我的代码,因为我不想搞砸我自己的代码库,所以这是一个来自 github 的项目。

https://github.com/ryanshelby/Stonehenge

谢谢你的帮助

最佳答案

在这种情况下,Swift 迁移器是错误的。 Swift 1.2 不再支持从 NSArray[AnyObject] 的隐式转换,因此它正确地确定需要转换为 [AnyObject] 但它错误地将其添加为不安全的转换而不是安全的转换。我假设 unsafe cast 不是有效代码并且应该生成错误,但它显示的消息不正确。

下一行应该会给出预期的结果,但 matt 是对的,您可能想要重新编写代码以避免 NSMutableArray:

sceneView.gestureRecognizers = gestureRecognizers as [AnyObject]

避免这种情况的简洁方法是获取原始数组或创建一个新数组,插入项目,然后重新分配。

var gestureRecognizers = screenView.gestureRecognizers ?? []
gestureRecognizers.insert(tapGesture, atIndex: 0)
screenView.gestureRecognizers = gestureRecognizers

也就是说,UIView 已经有一个用于添加单个手势识别器的 API:

screenView.addGestureRecognizer(tapGesture)

关于iOS swift 测试 1.2 版本错误,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com