Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift Can';t访问单对象数组_Arrays_Json_Swift_Xcode - Fatal编程技术网

Arrays Swift Can';t访问单对象数组

Arrays Swift Can';t访问单对象数组,arrays,json,swift,xcode,Arrays,Json,Swift,Xcode,我正在尝试从json文件访问数据。问题是有些值是NSSingleObjectArray(仅包含项的数组),我无法将其转换为字符串 class CarObject { var pictureURL: String! var carURL: String! var carPrice: String! required init(json: [String: AnyObject]) { pictureURL = json["galleryURL"] as

我正在尝试从json文件访问数据。问题是有些值是NSSingleObjectArray(仅包含项的数组),我无法将其转换为字符串

class CarObject {
    var pictureURL: String!
    var carURL: String!
    var carPrice: String!
    required init(json: [String: AnyObject]) {
        pictureURL = json["galleryURL"] as! String
        carURL = json["viewItemURL"] as! String
        carPrice = json["currentPrice"] as! String
        }
}
我收到以下错误消息:

无法将类型为“\uu NSSingleObjectArrayI”(0x10a2ec548)的值强制转换为“NSString”(0x109729440)

我试图这样访问它们:

"json["galleryURL"][0] as String!" 
var pictureURL: URL

required init?(json: [String: AnyObject]) {
    guard let pictureURLString = (json["galleryURL"] as? [String])?.first,
        let pictureURL = URLComponents(string: pictureURLString)?.url else {
        return nil
    }

    self.pictureURL = pictureURL
}
但我得到了以下错误:

Type 'Any?' has no subscript members
这些值如下所示:

"json["galleryURL"][0] as String!" 
var pictureURL: URL

required init?(json: [String: AnyObject]) {
    guard let pictureURLString = (json["galleryURL"] as? [String])?.first,
        let pictureURL = URLComponents(string: pictureURLString)?.url else {
        return nil
    }

    self.pictureURL = pictureURL
}
galleryURL=(“一个值”)

你们知道如何轻松访问它们吗?
谢谢

首先将内容转换为适当的类型。听起来您的值是包含单个字符串的数组,因此如下所示:

"json["galleryURL"][0] as String!" 
var pictureURL: URL

required init?(json: [String: AnyObject]) {
    guard let pictureURLString = (json["galleryURL"] as? [String])?.first,
        let pictureURL = URLComponents(string: pictureURLString)?.url else {
        return nil
    }

    self.pictureURL = pictureURL
}

此外,您可能需要重新考虑用于属性的类型。
pictureURL
carURL
属性都是URL,因此将它们键入为
URL
更有意义。
carPrice
属性很可能是数字属性,因此它更有意义,因为
Double

只需首先将内容转换为适当的类型。听起来您的值是包含单个字符串的数组,因此如下所示:

"json["galleryURL"][0] as String!" 
var pictureURL: URL

required init?(json: [String: AnyObject]) {
    guard let pictureURLString = (json["galleryURL"] as? [String])?.first,
        let pictureURL = URLComponents(string: pictureURLString)?.url else {
        return nil
    }

    self.pictureURL = pictureURL
}

此外,您可能需要重新考虑用于属性的类型。
pictureURL
carURL
属性都是URL,因此将它们键入为
URL
更有意义。
carPrice
属性很可能是数字属性,因此作为一个
Double

如何将数组“转换”为字符串更有意义?这个概念到底是什么意思?这不是把大象变成马吗?你到底想做什么?这是数组。像访问任何数组一样,从数组访问对象。“键入“any?”没有下标成员”将是一个很好的搜索短语。你知道,以防万一别人以前有过这个问题。如果
json[“galleryURL”]
是字符串数组,则需要将其转换为字符串数组,以便编译器知道这一点。如何将数组“转换”为字符串?这个概念到底是什么意思?这不是把大象变成马吗?你到底想做什么?这是数组。像访问任何数组一样,从数组访问对象。“键入“any?”没有下标成员”将是一个很好的搜索短语。你知道,以防万一别人以前有过这个问题。如果
json[“galleryURL”]
是字符串数组,则需要将其强制转换为字符串数组,以便编译器知道这一点。
URLComponents
的意义是什么?1.OP只需要一个字符串,而不是URL。2.如果OP确实需要URL,那么为什么不直接使用
URL(字符串:)
而不是
URLComponents
URLComponents
是目前推荐的从字符串创建URL的方法,因为它的行为比
URL(字符串:)
更现代。从文档中可以看出:“这个结构根据RFC3986解析和构造URL。它的行为与URL结构有细微的不同,后者符合旧的RFC。”你读过问题的代码了吗?你看到我的第一张纸条了吗。不需要
URL
。该值显然意味着包含URL,因此
URL
String
更适合该属性的类型。使用正确的工具进行作业。我还建议
carPrice
属性应该是
Double
而不是
String
。为了解决您的下一个问题:删除所有不必要的隐式展开和强制展开选项也是有意的,因为最小化这些是一个很好的实践。
URLComponents
的意义是什么?1.OP只需要一个字符串,而不是URL。2.如果OP确实需要URL,那么为什么不直接使用
URL(字符串:)
而不是
URLComponents
URLComponents
是目前推荐的从字符串创建URL的方法,因为它的行为比
URL(字符串:)
更现代。从文档中可以看出:“这个结构根据RFC3986解析和构造URL。它的行为与URL结构有细微的不同,后者符合旧的RFC。”你读过问题的代码了吗?你看到我的第一张纸条了吗。不需要
URL
。该值显然意味着包含URL,因此
URL
String
更适合该属性的类型。使用正确的工具进行作业。我还建议
carPrice
属性应该是
Double
而不是
String
。为了解决您的下一个问题:删除所有不必要的隐式展开和强制展开选项也是有意的,因为将它们最小化是一种好的做法。