在Swift 2中替换字符串

7

我正在尝试为iOS 9构建我的应用程序,但遇到了一个问题。以前,我有一个按钮,可以从标签中获取字符串,并将其添加到一个字符串中,该字符串会带领人们来到lmgtfy并自动搜索该字符串的内容,但现在我在map()中遇到了一个错误。以下是在iOS 8中有效的代码:

        @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)
        }

现在我遇到的错误提示是:"'map' 不可用:请在序列上调用 'map()' 方法。" 有任何想法吗?此外,我不确定链接是否有效,因为它应该是 lmgtfy,但我无法提交这个问题,除非我把URL改成google。


如果我正确理解错误信息的话,应该使用originalString.generate().map()而不是map(originalString.generate()) - Claus Jørgensen
1个回答

15
自Swift 2起,String不再符合SequenceType协议,因此您无法在其上调用generate。相反,您需要使用characters属性来获取一个符合SequenceType协议的String.CharacterView
同时,自Swift 2以后:mapSequenceType扩展中的方法。因此,您可以像调用方法一样而不是自由函数一样进行调用:
let str = "ab cd ef gh"
let replaced = String(str.characters.map { $0 == " " ? "+" : $0 }) 
// "ab+cd+ef+gh"

你也可以这样做:

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

你是一位绅士和学者。看起来这解决了我的问题!谢谢! - user5104686

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接