2016-01-09 93 views
0

我得到一个错误:错误斯威夫特与方法loadJSONFromBundle

Type 'Dictionary' has no member loadJSONFromBundle.

任何想法有什么错呢?

init(filename: String) 
{ 
    if let dictionary = Dictionary<String, AnyObject>.loadJSONFromBundle(filename) { 
     if let tilesArray = dictionary["tiles"] as? [[Int]] { 
      for (row, rowArray) in enumerate(tilesArray as! [[Int]]) { 
       let tileRow = NumRows - row - 1 
       for (column, value) in enumerate(rowArray) { 
        if value == 1 { 
         tiles[column, tileRow] = Tile() 
        } 
       } 
      } 
     } 
    } 
} 
+2

没有'loadJSONFromBundle'这样的方法。你在哪里看到这样的方法记录? – rmaddy

回答

0

.loadJSONFromBundle不是Dictionary中的默认方法。这可以通过扩展Dictionary来添加。这里我在Swift 3中的实现:

import Foundation 

extension Dictionary { 
    static func loadJSONFromBundle(filename: String) -> Dictionary<String, AnyObject>? { 
     if let path = Bundle.main.path(forResource: filename, ofType: "json") { 
      var error: NSError? 
      do { 
       let data: NSData? = try NSData(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions()) 
       if let data = data { 
        let dict: Any? = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions()) 
        if let dict = dict as? Dictionary<String, AnyObject> { 
         return dict 
        } 
        else { 
         print("file '\(filename)' is not vaild JSON: \(error!)") 
         return nil 
        } 
       } 
      } 
      catch { 
       print("could not load file '\(filename)'") 
       return nil 
      } 
     } 
     else { 
      print("could not find level file '\(filename)'") 
      return nil 
     } 
    } 
}