2016-07-25 17 views
-2

„Initializer für bedingte Bindung muss optional Typ, nicht 'string'. Ich versuchte sender.stringValue und sender.stringValue? aber Xcode Dinge sein lustiges wieder. (Oben Fehlermeldung Attribut)"Initialisierer für bedingte Bindung muss einen optionalen Typ haben, nicht 'string'", aber was sonst in dieser Situation?

 extension MapViewController: NSSearchFieldDelegate { 
     override func searchFieldAction(sender: NSSearchField) { 
      // Note: use defer to dismiss the search controller even if the guard returns 
      defer { 
      } 

      guard let text = sender.stringValue.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
       where !text.isEmpty else { return } 

      let request = MKLocalSearchRequest() 
      request.naturalLanguageQuery = text 
      request.region = mapView.region 

      let search = MKLocalSearch(request: request) 
      search.startWithCompletionHandler { (response, error) in 
       guard let item = response?.mapItems.first else { return } 

       let annotation = item.placemark 
       self.mapView.addAnnotation(annotation) 
       self.mapView.showAnnotations([annotation], animated: true) 
       self.mapView.selectAnnotation(annotation, animated: true) 
      } 
     } 
+1

Wenn dies nicht optional ist, ist die Lösung einfach, es nicht auszupacken. – Moritz

Antwort

0

Sie

nur wollen
let text = sender.stringValue.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()) 

guard !text.isEmpty else { return }