Я использую Swift 4 и Xcode 9.3.1.Я в том числе скриншоты кода.
Я новичок в мобильной разработке / программировании в целом и думал о том, как это сформулировать.Так что это лучшее, что я могу объяснить:
Я создаю приложение, которое получает местоположение пользователя для отправки ему помощи. Приложение получает координаты пользователя и отображаетTextView с их адресной информацией.Так что довольно прямая функциональность mapKit / coreLocation.Пока все хорошо: получение координат с помощью startUpdatingLocation () работает нормально, и я использовал Reverse Geocoder, чтобы получить название улицы и местность .Но они - означают расшифрованные строки улиц и населенных пунктов - распечатываются, только если я назову их в закрытии , а не за его пределами.Я понял (правильно или неправильно?) , что переменные, которые должны быть доступны для нескольких функций в классе, должны быть объявлены глобально наверху.Однако я не могу понять, как извлечь информацию из этого замыкания, чтобы использовать ее в другом месте.
Я гуглял и читал вопросы в stackOverflow, и я чувствую, что чего-то действительно простого не хватает, но могуне понять что.То, что я до сих пор безуспешно пытался:
1_ Определение глобальных переменных в виде пустых строк в начале класса и использование имен переменных внутри замыкания, где происходит обратный метод геокодирования, в попытке сохранить результирующий результатстрок, но когда я пытаюсь напечатать переменные вне замыкания, глобальная переменная остается неподвижной и пустой строкой ("").
[глобальные переменные объявлены вверху] [1]
2_ Определение пустого глобального массива строк и добавление информации из замыкания в глобальный массив.Все еще получил пустой массив за пределами закрытия.(так же, как 1)
3_Создать функцию --func decodedString () - в вернуть данные в виде строки, поэтому я могу использовать их, объявив
*let streetLocation : String = decodedString()*
Однако, когда я объявляю эту функцию следующим образом:
var street = ""
var locality = ""
// Get the street address from the coordinates
func deocodedString() -> String {
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) { placemarks, error in
if let placemark = placemarks?.first {
self.street = placemark.name!
self.locality = placemark.locality!
let string = "\(self.street), \(self.locality)"
return string
}
}
}
Я получаю ошибку: Неожиданное возвращаемое значение в void функции
неожиданное возвращаемое значение no void в функции void
Наконец, если я передаю информацию прямо в TextView внутри замыкания с использованием приведенного ниже кода, мой textView успешно обновляется:но я не могу отформатировать строки, что мне нужно сделать, чтобы они выглядели как инструкции по проектированию, которым я следую (так называемый жирный текст, обычный текст и несколько разных размеров текста):
CLGeocoder().reverseGeocodeLocation(location) { placemarks, error in
if let placemark = placemarks?.first {
self.street = placemark.name!
self.locality = placemark.locality!
let string = "\(self.street), \(self.locality)"
self.addressTextView.text = string
}
}
Поэтому я не могу просто передать его с помощью метода textView.text = string.
Буду признателен за помощь ... Я искал StackOverFlow, youtube и другиеучебные заведения, но я не могу понять, что яssing, или почему мое объявление функции генерирует ошибку.За последние 24 часа я уже несколько раз уничтожал и переворачивал свой код, не получая независимую строку, к которой я могу применить форматирование, прежде чем передать ее в textView, и я не знаю, как еще подойти к нему.