Аргумент передан вызову, который не принимает аргументов в Xcode

#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