Eu tenho uma string assim:
let muString = "\n\nFebruary 11, 2012\n\nThis natural-color image showing Acme Inc\'s logo... bla bla bla “Mount Everest”... bla bla 'Black Viper' ... bla bla. \"Naja\""
Em outras palavras, tenho citações inteligentes
` ´ ' ' “ ”
(nota: SO não está renderizando corretamente os caracteres anteriores. Quero dizer, eles estão abrindo e fechando aspas simples e duplas).
e também aspas duplas e quero substituir tudo por uma única aspa ASCII simples.
Eu criei esta extensão:
extension String {
func plainText() -> String {
var newString = self.replacingOccurrences(of: "\u{0060}", with: "'")
newString = self.replacingOccurrences(of: "\u{00b4}", with: "'")
newString = self.replacingOccurrences(of: "\u{2018}", with: "'")
newString = self.replacingOccurrences(of: "\u{2019}", with: "'")
newString = self.replacingOccurrences(of: "\u{201c}", with: "'")
newString = self.replacingOccurrences(of: "\u{201d}", with: "'")
newString = self.replacingOccurrences(of: "\"", with: "'")
return newString
}
}
Mas fazendo
print (myString.plainText())
me dá o mesmo que myString
sozinho.
Em outras palavras, a extensão não limpa nada.
Alguma ideia?
Então
replacingOccurrences
retorna uma nova string. Chamá-loself
dentro da função significa que você sempre o chamará na própria string original. Isso significa que apenas sua última chamadareplacingOccurrences
é realmente usada. Em vez de sempre ligarreplacingOccurrences
,self
você deve sempre ligarnewString
:Ou você pode simplesmente encadear as chamadas diretamente, o que é muito mais limpo.