2015-11-23 61 views
0

我试图将现有的Objective-C代码行转换为Swift。以下是我的。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。

回答

0

类型推断使您所有的常量声明和Int类型的循环计数器变量,因为您正在使用Int文字。你不能固有地做混合类型的数学,如Int,DoubleCGFloat。此外,你最终试图创建一个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) 
      } 
     } 
    } 
} 
+0

谢谢。但是,不,同样的错误盛行。 –

+0

您的x和y值也会导致问题。尝试CGFloat(x)和CGFloat(y)。 –

+0

不,这不会改变一件事情。 –

相关问题