将类型为"JSON"的非可选值与"nil"进行比较始终返回 true。有什么建议可以解决这个问题吗?


if let vendorId = vendor?.id {
APIManager.shared.getProducts(vendorId: vendorId, completionHandler: { (json) in
if json != nil { <<<<<<<<<Comparing non-optional value of type 'JSON' to 'nil' always returns true
self.products = []
if let tempProducts = json["products"].array {
for item in tempProducts {
let product = Product(json: item)
self.products.append(product)
}
self.tableView.reloadData()
Helpers.hideActivityIndicator(self.activityIndicator)
}
}
})
}
}

在我的APIManager.swift

import Foundation
import Alamofire
import SwiftyJSON
import FBSDKLoginKit
class APIManager {
static let shared = APIManager()
let baseURL = NSURL(string: BASE_URL)
var accessToken = ""
var refreshToken = ""
var expired = Date()

//请求服务器功能

func requestServer(method: Alamofire.HTTPMethod , path: String, params: [String: AnyObject]?, encoding: ParameterEncoding, completionHandler: @escaping (JSON?) -> Void ) {
let url = baseURL?.appendingPathComponent(path)
refreshTokenIfNeed {
AF.request(url!, method: method, parameters: params, encoding: encoding, headers: nil).responseJSON{ response in
switch response.result {
case .success(let value):
let jsonData = JSON(value)
completionHandler(jsonData)
break
case .failure:
completionHandler(nil)
break
}
}
}
}

//API-获取最新订单(客户(

func getLatestOrder(completionHandler: @escaping (JSON) -> Void) {
let path = "api/customer/order/latest/"
let params: [String: Any] = [
"access_token": self.accessToken
]
requestServer(method: .get, path: path, params: params as [String : AnyObject], encoding: URLEncoding()) { (json) in
print(json!)
}
}
}

因为json在您的情况下是不可选的,所以将其与nil进行比较将始终返回true。你根本无法将其与零进行比较。如果您希望它是nil,那么它应该是可选的。如果你确信它永远不会是nil,就让它像现在一样,只需删除If条件。但请注意,如果它在运行时进入nil,将导致崩溃。

相关内容

最新更新