无法将“NSMutableArray”类型的值转换为预期的参数类型“[SKTexture]”
Posted
技术标签:
【中文标题】无法将“NSMutableArray”类型的值转换为预期的参数类型“[SKTexture]”【英文标题】:Cannot convert value of type 'NSMutableArray' to expected argument type '[SKTexture]' 【发布时间】:2016-05-05 17:22:01 【问题描述】:我收到以下代码错误:
func prepareAnimationForDictionary(settings: NSDictionary,repeated: Bool) -> SKAction
let atlas: SKTextureAtlas =
SKTextureAtlas(named: settings["AtlasFileName"] as! String)
let textureNames:NSArray = settings["Frames"] as! NSArray
let texturePack: NSMutableArray = []
for texPath in textureNames
texturePack.addObject(atlas.textureNamed(texPath as! String))
let timePerFrame: NSTimeInterval = Double(1.0/(settings["FPS"]
as! Float))
let anim:SKAction = SKAction.animateWithTextures(texturePack,
timePerFrame: timePerFrame) // the error I get is here
if repeated
return SKAction.repeatActionForever(anim)
else
return anim
【问题讨论】:
查看这个答案***.com/questions/25837539/… 【参考方案1】:只需使用预期的 (Swift) 类型
...
let textureNames = settings["Frames"] as! [String]
var texturePack = [SKTexture]()
for texPath in textureNames
texturePack.append(atlas.textureNamed(texPath))
...
从 Swift 的角度来看,可变 Foundation 集合类型 NSMutableArray
和 NSMutableDictionary
是未指定类型的,与 Swift 本机对应物无关。
【讨论】:
【参考方案2】:更改timePerFrame
给(timePerFrame as [AnyObject]) as! [SKTexture]
【讨论】:
【参考方案3】:好的,考虑一下。你有一个变量texturePack
。您没有显示声明,但根据错误消息,我将假设它的类型为 NSMutableArray
。有问题的调用需要一个 SKTexture
对象数组。
因此,请将您的 texturePack
转换为所需的类型:
let anim:SKAction = SKAction.animateWithTextures(texturePack as! [SKTexture],
timePerFrame: timePerFrame) //error i get is here
请注意,如果 texturePack 不是 SKTexture
对象的数组,您最好使用 if let
或 guard
来检查转换是否成功:
guard
let anim:SKAction = SKAction.animateWithTextures(texturePack as! [SKTexture],
timePerFrame: timePerFrame) //error i get is here
else
return nil;
或者,正如其他人所建议的,将 texturePack
数组的声明更改为 [SKTexture]
类型
【讨论】:
这是正确的,但没有必要将texturePack
改为NSMutableArray
而不是快速的Array
起初我没有在 OP 发布的代码中看到数组的声明,所以我认为数组是 NSMutableArray 而不是 Swift 类型数组可能是有正当理由的。如果您可以使数组成为 SKTexture
对象的 Swift 数组,那肯定会更好。 (或者就此而言,您可以使用新的类型化 NSArray 构造。)
感谢大家的帮助。非常感谢以上是关于无法将“NSMutableArray”类型的值转换为预期的参数类型“[SKTexture]”的主要内容,如果未能解决你的问题,请参考以下文章
无法将 NSMutableArray 类型的值分配给 UIBarButtonItem 类型
无法将 [Struct] 类型的值快速转换为 [string] 类型