#ios #swift #xcode #arguments #geopoints
#iOS #swift #xcode #аргументы #географические точки
Вопрос:
У меня есть UITableViewCell, и когда я запускаю приведенный ниже код, запущенные коды внезапно выдали ошибку 3. Я написал проблемные строки в коде, но как я могу решить эту проблему?
UITableViewCell: импорт UIKit импорт MapKit импорт Firebase импорт CoreLocation импорт SDWebImage
class anasayfaCell: UITableViewCell, MKMapViewDelegate, CLLocationManagerDelegate{
@IBOutlet weak var kullaniciAdiLabel: UILabel!
@IBOutlet weak var yorumLabel: UILabel!
@IBOutlet weak var kullaniciImagelabel: UIImageView!
@IBOutlet weak var yardimButonLabel: UILabel!
@IBOutlet weak var anasayfaHarita: MKMapView!
@IBOutlet weak var documentIdLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
yardimButonLabel.text = "Yardım Bekliyor..."
anasayfaHarita.layer.cornerRadius = 13
anasayfaHarita.layer.masksToBounds = true
layer.cornerRadius = 15
layer.masksToBounds = true
anasayfaHarita.isUserInteractionEnabled = false
anasayfaHarita.isScrollEnabled = false
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
@IBAction func yardimEdildiSwitch(_ sender: UISwitch) {
if (sender.isOn == true){
let firestoreDB = Firestore.firestore()
if let trueOrFalse = Bool(yardimButonLabel.text!) {
let ValueStore = ["helped" : true ] as [String : Any]
firestoreDB.collection("posts").document(documentIdLabel.text!).setData(ValueStore, merge: true)
}
}
}
func prepare(with post: Post) {
kullaniciAdiLabel.text = post.ownerEmail
yorumLabel.text = post.comment
yardimButonLabel.text = String(post.helped)
yardimButonLabel.text = String(post.id)
if let imageURL = URL(string: post.imageURL) {
kullaniciImagelabel.sd_setImage(with: imageURL)
}
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2D(geoPoint: post.location). **[Argument passed to call that takes no arguments]**
annotation.title = "Yardım Noktası"
annotation.subtitle = "Helpet"
anasayfaHarita.addAnnotation(annotation)
let span : MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: 0.05,longitudeDelta: 0.05)
let region = MKCoordinateRegion(center: CLLocationCoordinate2D(geoPoint: post.location), span: span) **[Argument passed to call that takes no arguments]**
anasayfaHarita.setRegion(region, animated: true)
}
Комментарии:
1. Давайте проверим доступные методы
CLLocationCoordinate2D
: developer.apple.com/documentation/corelocation /… Есть лиinit(geoPoint:)
? Нет. Есть ли у вас где-нибудь в вашем коде такой метод? (Сторонняя библиотека, ваш собственный код и т. Д.) В противном случае, если вы удалите этот код и попытаетесь переписать его по буквам, что скажет вам об автозаполнении XCode ? Любые методы выглядят одинаково?
Ответ №1:
Вы пытаетесь создать CLLocationCoordinate2D
, используя несуществующий инициализатор. Поэтому вы можете либо создать этот пользовательский инициализатор, либо преобразовать GeoPoint
в a CLLocationCoordinate2D
каким-либо другим способом.
Чтобы сразу решить вашу проблему, просто создайте инициализатор:
import CoreLocation
import FirebaseFirestore
extension CLLocationCoordinate2D {
init(geoPoint: GeoPoint) {
self.init(latitude: geoPoint.latitude, longitude: geoPoint.longitude)
}
}
Другой способ сделать это — расширить GeoPoint
, чтобы предоставить вам a CLLocationCoordinate2D
всякий раз, когда вам это нужно:
import CoreLocation
import FirebaseFirestore
extension GeoPoint {
var coordinate2D: CLLocationCoordinate2D {
return CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
}
}
И чтобы использовать его, просто получите доступ к этому свойству из a GeoPoint
всякий раз, когда вам нужно CLLocationCoordinate2D
.
let annotation = MKPointAnnotation()
annotation.coordinate = post.location.coordinate2D