Swift错误:找不到接受提供的参数的'

编程入门 行业动态 更新时间:2024-10-27 16:36:57
Swift错误:找不到接受提供的参数的' - '的重载(Swift error: Could not find an overload for '-' that accepts the supplied arguments)

我正在尝试将现有的Objective-C代码行转换为Swift。 以下是我所拥有的。

import UIKit import SpriteKit let kWorldWidth = 6324 let kWorldHeight = 620 let kWorldTileSize = 62 let kWorldCenterX = 3162 let kWorldCenterY = 310 class ViewController: UIViewController { weak var scene : SKScene? var backgroundTextures = NSMutableArray() override func viewDidLoad() { super.viewDidLoad() loadWorldTiles() } func loadWorldTiles() { let tileAtlas = SKTextureAtlas(named:"Tiles") backgroundTextures = NSMutableArray(capacity: 1020) for var y = 0; y < 10; y++ { for var x = 0; x < 102; x++ { let tileNumber = (y * 102) + x let tileNode = SKSpriteNode(texture:tileAtlas.textureNamed(String(format:"%d",tileNumber))) var position: CGPoint = CGPointMake(x*kWorldTileSize-kWorldCenterX+0.5*kWorldTileSize,kWorldHeight-y*kWorldTileSize-kWorldCenterY-0.5*kWorldTileSize) tileNode.position = position backgroundTextures.addObject(tileNode) } } } }

我得到一个错误,我有var位置。 错误消息是找不到接受提供的参数的' - '的重载。 运行搜索时,我发现当您没有显式声明变量类型时,您将收到此错误。 如果我创建整数变量,如

var xval:CGFloat = x*kWorldTileSize-kWorldCenterX+0.5*kWorldTileSize var yval:CGFloat = kWorldHeight-y*kWorldTileSize-kWorldCenterY-0.5*kWorldTileSize var position: CGPoint = CGPointMake(xval,yval)

我仍然得到同样的错误。

我究竟做错了什么?

Muchos thankos。

I'm trying to translate existing lines of Objective-C code into Swift. The following is what I have.

import UIKit import SpriteKit let kWorldWidth = 6324 let kWorldHeight = 620 let kWorldTileSize = 62 let kWorldCenterX = 3162 let kWorldCenterY = 310 class ViewController: UIViewController { weak var scene : SKScene? var backgroundTextures = NSMutableArray() override func viewDidLoad() { super.viewDidLoad() loadWorldTiles() } func loadWorldTiles() { let tileAtlas = SKTextureAtlas(named:"Tiles") backgroundTextures = NSMutableArray(capacity: 1020) for var y = 0; y < 10; y++ { for var x = 0; x < 102; x++ { let tileNumber = (y * 102) + x let tileNode = SKSpriteNode(texture:tileAtlas.textureNamed(String(format:"%d",tileNumber))) var position: CGPoint = CGPointMake(x*kWorldTileSize-kWorldCenterX+0.5*kWorldTileSize,kWorldHeight-y*kWorldTileSize-kWorldCenterY-0.5*kWorldTileSize) tileNode.position = position backgroundTextures.addObject(tileNode) } } } }

I get an error where I have var position. The error message is Could not find an overload for '-' that accepts the supplied arguments. Running a search, I find that you will get this error when you don't explicitly declare variable types. If I create integer variables like

var xval:CGFloat = x*kWorldTileSize-kWorldCenterX+0.5*kWorldTileSize var yval:CGFloat = kWorldHeight-y*kWorldTileSize-kWorldCenterY-0.5*kWorldTileSize var position: CGPoint = CGPointMake(xval,yval)

I still get the same error.

What am I doing wrong?

Muchos thankos.

最满意答案

类型推断正在进行所有常量声明和Int类型的循环计数器变量,因为您使用的是Int文字。 你不能固有地使用Int , Double和CGFloat等混合类型进行数学运算。 此外,您最终尝试创建CGFloat类型,因此最好明确地为您的常量使用它,如下所示:

import UIKit import SpriteKit let kWorldWidth: CGFloat = 6324 let kWorldHeight: CGFloat = 620 let kWorldTileSize: CGFloat = 62 let kWorldCenterX: CGFloat = 3162 let kWorldCenterY: CGFloat = 310 class ViewController: UIViewController { weak var scene : SKScene? var backgroundTextures = NSMutableArray() override func viewDidLoad() { super.viewDidLoad() loadWorldTiles() } func loadWorldTiles() { let tileAtlas = SKTextureAtlas(named:"Tiles") backgroundTextures = NSMutableArray(capacity: 1020) for var y = 0; y < 10; y++ { for var x = 0; x < 102; x++ { let tileNumber = (y * 102) + x let tileNode = SKSpriteNode(texture:tileAtlas.textureNamed(String(format:"%d",tileNumber))) var position: CGPoint = CGPointMake(CGFloat(x)*kWorldTileSize-kWorldCenterX+0.5*kWorldTileSize,kWorldHeight-CGFloat(y)*kWorldTileSize-kWorldCenterY-0.5*kWorldTileSize) tileNode.position = position backgroundTextures.addObject(tileNode) } } } }

Type inference is making all your constant declarations and for loop counter variables of type Int, since you are using Int literals. You cannot inherently do math with mixed types like Int, Double, and CGFloat. Also, you are ultimately trying to create a CGFloat type, so it's best to use that explicitly for your constants like so:

import UIKit import SpriteKit let kWorldWidth: CGFloat = 6324 let kWorldHeight: CGFloat = 620 let kWorldTileSize: CGFloat = 62 let kWorldCenterX: CGFloat = 3162 let kWorldCenterY: CGFloat = 310 class ViewController: UIViewController { weak var scene : SKScene? var backgroundTextures = NSMutableArray() override func viewDidLoad() { super.viewDidLoad() loadWorldTiles() } func loadWorldTiles() { let tileAtlas = SKTextureAtlas(named:"Tiles") backgroundTextures = NSMutableArray(capacity: 1020) for var y = 0; y < 10; y++ { for var x = 0; x < 102; x++ { let tileNumber = (y * 102) + x let tileNode = SKSpriteNode(texture:tileAtlas.textureNamed(String(format:"%d",tileNumber))) var position: CGPoint = CGPointMake(CGFloat(x)*kWorldTileSize-kWorldCenterX+0.5*kWorldTileSize,kWorldHeight-CGFloat(y)*kWorldTileSize-kWorldCenterY-0.5*kWorldTileSize) tileNode.position = position backgroundTextures.addObject(tileNode) } } } }

更多推荐

本文发布于:2023-08-05 10:31:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1431259.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:找不到   错误   参数   Swift

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!