По сути, я анализирую данные JSON и присваиваю их переменной addressPressNow
. Затем у меня появляется следующая функция, которая выполняется, когда пользователь нажимает на UILabel:
Цель состоит в том, чтобы открыть открытые Apple Mapsзначение переменной, которое оно содержит.
Поскольку я назначаю адрес переменной, она будет содержать пробелы, например: 3981 Test Drive Cupertino CA 95014
ПРИМЕЧАНИЕ : Значениепеременная передается правильно, потому что когда я выполняю print(addressPressNow)
в func tapFunction
, она печатается правильно.
@objc
func tapFunction(sender:UITapGestureRecognizer) {
let targetURL = NSURL(string: "http://maps.apple.com/?q=" + addressPressNow)!
UIApplication.shared.openURL(targetURL as URL)
}
Проблема в том, что у меня возникают проблемы с применением переменной к строковому URL со следующей ошибкой:
Поток 1: фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения
Ниже описано, как я присваиваю значение переменной:
struct FacilityInfo: Decodable {
let address: String
class infoViewController: UIViewController {
var addressPressNow : String = ""
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(infoViewController.tapFunction))
addressInfo.isUserInteractionEnabled = true
addressInfo.addGestureRecognizer(tap)
let url = URL(string: "https://test/test/example”)!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// ensure there is no error for this HTTP response
guard error == nil else {
print ("error: \(error!)")
return
}
// ensure there is data returned from this HTTP response
guard let data = data else {
print("No data")
return
}
// Parse JSON into array of Car struct using JSONDecoder
guard let cars = try? JSONDecoder().decode([FacilityInfo].self, from: data), let secondCar = cars.first
else {
print("Error: Couldn't decode data into cars array")
return
}
DispatchQueue.main.async {
self.addressPressNow = secondCar.facility_address
}
}