2015-11-23 27 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

不,這不會改變一件事情。 –

相關問題