2015-09-25 25 views
-1

我不确定Swift 2中的API是否发生了变化,但我无法使用过滤器来处理Swift 2中的字符串。以下内容应该将“abc123 $$ $ ff“转换为”abcff“。在Swift 2中对字符串使用过滤器()

// Removes all special characters and whitespaces 
func compressString(aString: String) -> String{ 
    let charSet = NSCharacterSet.letterCharacterSet() 

// The following don't work: 
// return aString.filter{charSet.contains($0)} 
// return String(filter(aString).{charSet.contains($0)}) 
} 
+1

你的问题是什么?发生了什么,如果不是你所期望的? –

回答

1

如果你要使用过滤器,你需要在字符运行它查看:

// Removes all special characters and whitespaces 
func compressString(aString: String) -> String{ 
    let charSet: [Character] = ["$", " ", "1", "2", "3"] 

    // The following don't work: 
    return String(aString.characters.filter { !charSet.contains($0) }) 
} 

let before = "abc123$$$ ff" 


let after = compressString(before) // "abcff" 
1
func compressString(aString: String) -> String { 
    let letterSet = NSCharacterSet.letterCharacterSet() 
    return String(aString.characters.filter{letterSet.characterIsMember(String($0).utf16.first!)}) 
} 

let str = "abc123$$$ ff" 
compressString(str) // abcff 

您还可以创建一个扩展,简化代码:

extension String { 
    var lettersOnly: String { 
     return String(characters.filter{NSCharacterSet.letterCharacterSet().characterIsMember(String($0).utf16.first!)}) 
    } 
} 
// Removes all special characters and whitespaces 

let str = "abc123$$$ ff" 

let letters = str.lettersOnly // "abcff" 
+0

适合我。但有没有办法使用过滤器? – goodcow

+0

@goodcow您可以使用NSCharacterSet characterIsMember方法。看我的编辑。 –