user5104686
user5104686

Reputation:

Replaced String in Swift 2

So I'm trying to build my app for iOS 9 and am running into one problem. Before, I had a button that would take the string from a label and add it to a string that would take a person to lmgtfy and automatically search for the contents of the string, but now I'm running into an error with map(). Here is the code that worked in 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)
        }

So now the error I'm getting says, "'map' is unavailable: call the 'map()' method on the sequence." Any ideas? Also, I'm not positive that link will work because it is supposed to be lmgtfy but I couldn't submit this question unless I changed the URL to google.

Upvotes: 7

Views: 2105

Answers (1)

ABakerSmith
ABakerSmith

Reputation: 22939

As of Swift 2, String no longer conforms to SequenceType, therefore you can't call generate on it. Instead you need to use the characters property to obtain a String.CharacterView, which does conform to SequenceType.

Also with Swift 2: map is a method in an extension of SequenceType. Therefore you call it like a method, instead of a free function:

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

You could also do:

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

Upvotes: 15

Related Questions