2015-07-26 4 views
5

Quindi sto provando a creare la mia app per iOS 9 e sto incontrando un problema. Prima, avevo un pulsante che prendeva la stringa da un'etichetta e la aggiungeva a una stringa che avrebbe portato una persona a leggere e cercava automaticamente il contenuto della stringa, ma ora sto correndo un errore con map() . Ecco il codice che ha lavorato in iOS 8:Sostituita stringa in Swift 2

 @IBAction func googleButton() { 
     let replaced = String(map(originalString.generate()) { $0 == " " ? "+" : $0 }) 
     if let url = NSURL(string: "http://google.com/?q=\(replaced)") { 
      UIApplication.sharedApplication().openURL(url) 
     } 

      print(replaced) 
     } 

Così ora l'errore che sto ricevendo dice: " 'mappa' non è disponibile: chiamare il 'map()' metodo sulla sequenza." Qualche idea? Inoltre, non sono sicuro che il collegamento funzionerà perché dovrebbe essere lmgtfy ma non potrei inviare questa domanda a meno che non abbia cambiato l'URL di google.

+0

'originalString.generate() map()' invece di 'mappa (originalString. generate()) 'se sto leggendo l'errore correttamente. –

risposta

13

A partire da Swift 2, String non è più conforme allo SequenceType, pertanto non è possibile chiamare generate su di esso. Invece è necessario utilizzare la proprietà characters per ottenere un valore String.CharacterView, che è conforme a SequenceType.

Anche con Swift 2: map è un metodo in un'estensione di SequenceType. Pertanto si chiama come un metodo, invece di una funzione libera:

let str = "ab cd ef gh" 
let replaced = String(str.characters.map { $0 == " " ? "+" : $0 }) 
// "ab+cd+ef+gh" 

Si potrebbe anche fare:.

let replaced = str.stringByReplacingOccurrencesOfString(" ", withString: "+") 
// "ab+cd+ef+gh" 
+0

Sei un gentiluomo e uno studioso. Sembra che abbia risolto il mio problema! Grazie! –