我正在尝试使用IBM的新Swift在线沙盒。 以下脚本未在该沙箱上运行:http://swiftlang.ng.bluemix.net/
import Foundation
func palindromTest(s: String) -> Bool{
let lower = s.lowercaseString
let letters = NSCharacterSet.letterCharacterSet()
let onlyLetters = lower.characters.filter({String($0).rangeOfCharacterFromSet(letters) != nil})
let reverseLetters = Array(onlyLetters).reverse()
return String(onlyLetters) == String(reverseLetters)
}
palindromTest("abc")
沙箱会输出以下错误消息:
/swift-execution/code-tmp.swift:7:48: error: value of type 'String' has no member 'rangeOfCharacterFromSet'
let onlyLetters = lower.characters.filter({String($0).rangeOfCharacterFromSet(letters) != nil})
我忘了导入一些东西吗?希望你能帮帮我。
感谢。
答案 0 :(得分:0)
rangeOfCharacterFromSet
是众多String
方法中的一种
实际上由NSString
处理。
来自this commit
到NSString.swift,似乎支持rangeOfCharacterFromSet
最近才添加到(非Apple)基金会图书馆,
因此,在IBM Swift Sandbox更新使用之前,您无法使用它
一个新的Swift版本。
答案 1 :(得分:0)
FWIW,现在可以在Sandbox swiftlang.ng.bluemix.net/#/repl/aae5d1caf4e0a6232ff428c3a0160e6e98cba6ed913ce9176f2baee46d30cb1c
中使用答案 2 :(得分:0)
自从给出这些答案以来,很多事情都发生了变化。 I've updated Pat's Sandbox answer for Swift 3.1.1。以下是API更改的代码和摘要。
标准库和Foundation中的几个方法已被重命名:
.reverse()
→.reversed()
.rangeOfCharacterFromSet()
→.rangeOfCharacter(from:)
.lettersCharacterSet()
→.letters
我也做了一些改变,也许仅仅是出于个人喜好。我选择使用String.rangeOfCharacter(from:)
,而不是使用CharacterSet.contains()
,而我需要使用String.unicodeScalars
代替.characters
。一般不确定性能权衡,但我喜欢如何清理。
import Foundation
func palindromTest(_ word: String) -> Bool{
let letters = CharacterSet.letters
let onlyLetters = word.lowercased().unicodeScalars.filter {
letters.contains($0)
}.map { Character($0) }
let reverseLetters = onlyLetters.reversed()
print("\(String(onlyLetters)) == \(String(reverseLetters))")
return String(onlyLetters) == String(reverseLetters)
}
print(palindromTest("abc"))
// false
print(palindromTest("dud"))
// true