func jsonParsing1(){
do{
let path : NSString = NSBundle.mainBundle().pathForResource("fileName", ofType: "json")!
let data : NSData = try! NSData(contentsOfFile: path as String, options: NSDataReadingOptions.DataReadingMappedIfSafe)
let jsonData = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers)
let jsonArray = jsonData
** let templeArray = (jsonArray.valueForKey("temple-name") as? NSArray)!**
}catch {
print(error)
}
}
}
我的json文件是 [ { “寺庙名称”:" aaa", “image”:" image.png“, “描述”:“aaa” }, { “寺庙名称”:" bbb", “image”:" image1.png“, “description”:“bbb” } ] 我在一个单独的类中使用json文件,并试图通过该项目访问解析的数组。 使用全局数组但从另一个类调用时返回nil。提前谢谢。
我需要全局使用templeArray。
答案 0 :(得分:0)
您可以使用templeArray属性创建单例类,将值存储在此数组中并通过singleton类的共享实例访问它。 或者,
您可以在appDelegate中声明templeArray属性并对其进行全局访问。
答案 1 :(得分:0)
您可以static
变量访问项目中的数据。
class GlobalVariables {
static var templeArray : NSMutableArray?
}
您可以通过
在整个申请过程中使用templeArray
GlobalVariables.templeArray?.objectAtIndex(index)
答案 2 :(得分:0)
请尝试这种方法:
class MyClass {
static var templeArray : NSArray?
func jsonParsing1(){
let path : NSString = NSBundle.mainBundle().pathForResource("fileName", ofType: "json")!
let data : NSData = try! NSData(contentsOfFile: path as String, options: NSDataReadingOptions.DataReadingMappedIfSafe)
let jsonData = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers)
let jsonArray = jsonData
MyClass.templeArray = (jsonArray.valueForKey("temple-name") as? NSArray)!
/*
* You can now access to templeArray in this way:
* let myArray : NSArray? = MyClass.templeArray
*/
}
}
另外,do / catch块在Swift2中没用。
编辑: 你错了。
let templeArray = (jsonArray.valueForKey("temple-name") as? NSArray)!
总是为零,因为字段名称不是数组,而是字符串。 你必须这样做:
MyClass.templeArray = jsonArray
然后你可以通过这种方式进入第一座寺庙:
let temple = MyClass.templeArray[0]
let templeName : String = temple.objectForKey("temple-name") as? String
答案 3 :(得分:0)
此代码应该有效:
var templeArray: NSMutableArray = []
class Parser {
func jsonParsing1() {
do {
let path : NSString = NSBundle.mainBundle().pathForResource("fileName", ofType: "json")!
let data : NSData = try NSData(contentsOfFile: path as String, options: NSDataReadingOptions.DataReadingMappedIfSafe)
let jsonData = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers)
let jsonArray = jsonData
if let rawTempleArray = jsonArray.valueForKey("temple-name") as? NSMutableArray {
templeArray = rawTempleArray
} else {
print("temple-name is not array")
}
} catch {
print(error)
}
}
}
我会这样做:
struct Temple { //or class
// your fields here
init? (templeDictionary: NSDictionary) {
// your parser here
}
}
class TheParser {
static var theTempleArray: [Temple] = []
func jsonParsing1() {
do {
let path : NSString = NSBundle.mainBundle().pathForResource("fileName", ofType: "json")!
let data : NSData = try NSData(contentsOfFile: path as String, options: NSDataReadingOptions.DataReadingMappedIfSafe)
let jsonData = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers)
let jsonArray = jsonData
if let rawTempleArray = jsonArray.valueForKey("temple-name") as? NSArray {
for temple in rawTempleArray {
if let theTemple = temple as? NSDictionary { // or NSArray or String depending of your json structure
if let templeItem = Temple(templeDictionary: theTemple) {
TheParser.theTempleArray.append(templeItem)
}
}
}
} else {
print("temple-name is not array")
}
} catch {
print(error)
}
}
}