【问题标题】:Swift2 Ambiguous use of subscript when i run it on device当我在设备上运行它时,Swift2 不明确地使用下标
【发布时间】:2016-04-12 16:47:53
【问题描述】:

当我要在我的设备上运行我的应用程序时,我的 swift 代码出现问题。当我在模拟器上运行它时一切都很好,但是当我要在我的设备上运行它时出现两个错误。

最后两行出现两个错误,两行都显示“下标使用不明确”。

如果需要帮助,我正在运行最新的 xcode...

    let requestURL: NSURL = NSURL(string: "The webpage im getting info from")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in



        let httpResponse = response as! NSHTTPURLResponse // method that access information

        let statusCode = httpResponse.statusCode

        if (statusCode == 200) {
            do{

                let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)


                // naming the two variables from json
                if let counter = json["counts"] {

            // It gets an error on both the peopleIn and peopleOut
                    let peopleIn = counter! [0]
                    let peopleOut = counter! [1]

【问题讨论】:

  • 我希望计数器即 json["counts"] 是一个正确的数组结构。

标签: xcode swift subscript


【解决方案1】:

json["counts"] 返回AnyObject,编译器不知道它应该是一个数组。

至少将对象转换为预期的类型

if let counter = json["counts"] as? [AnyObject] {

如果预期类型比[AnyObject] 更具体,则将其转换为该类型。

如果if let 成功关联变量是非可选的,则不需要感叹号。

let peopleIn = counter[0]

【讨论】:

  • 感谢您的回答。它帮助我在设备上运行应用程序,但现在它给了我一个错误消息:“Json 错误:错误域 = NSCocoaErrorDomain 代码 = 3840 “字符 0 周围的值无效。” UserInfo = {NSDebugDescription = 字符 0 周围的值无效.}"
  • 它在模拟器上完美运行,但在设备上却不行。为什么模拟器可以得到一个好的 JSON 而不是设备?它们不应该是一样的吗?
  • 其实应该是一样的。分别从返回的数据中创建一个字符串并比较字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多