Сравнение необязательного значения типа 'JSON' с 'nil' всегда возвращает true. Любое предложение, чтобы исправить это? - PullRequest
1 голос
/ 31 октября 2019
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)
                }
            }
        })
    }
}

In My 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!)
    }
}
}

1 Ответ

1 голос
/ 31 октября 2019

, поскольку json не является обязательным в вашем случае, сравнение его с nil всегда вернет true. Вы просто не можете сравнить это с нулем. Если вы ожидаете, что оно будет nil, то оно должно быть необязательным. Если вы уверены, что оно никогда не будет nil, пусть будет так, как сейчас, просто удалите условие if. Но имейте в виду, что, если во время выполнения он выйдет nil, это вызовет сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...