使用 IBM Swift 沙盒和 rangeOfCharacterFromSet
Using IBM Swift Sandbox and rangeOfCharacterFromSet
我正在尝试 swift 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([=11=]).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([=12=]).rangeOfCharacterFromSet(letters) != nil})
我是不是忘记导入什么了?希望你能帮助我。
谢谢。
rangeOfCharacterFromSet
是众多 String
方法之一
实际上由 NSString
.
处理
来自this commit
到 NSString.swift,似乎支持 rangeOfCharacterFromSet
最近才添加到(非 Apple)基金会图书馆,
所以在 IBM Swift Sandbox 更新为可以使用之前您不能使用它
一个新的 Swift 版本。
FWIW,现在可以在沙盒中使用 swiftlang.ng.bluemix.net/#/repl/aae5d1caf4e0a6232ff428c3a0160e6e98cba6ed913ce9176f2baee46d30cb1c
自给出这些答案以来,很多事情都发生了变化。 I've updated Pat's Sandbox answer for Swift 3.1.1。以下是 API 更改的代码和摘要。
标准库和 Foundation 中的几个方法已经重命名:
- 数组:
.reverse()
→.reversed()
- 字符串:
.rangeOfCharacterFromSet()
→ .rangeOfCharacter(from:)
- (NS)字符集:
.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([=10=])
}.map { Character([=10=]) }
let reverseLetters = onlyLetters.reversed()
print("\(String(onlyLetters)) == \(String(reverseLetters))")
return String(onlyLetters) == String(reverseLetters)
}
print(palindromTest("abc"))
// false
print(palindromTest("dud"))
// true
我正在尝试 swift 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([=11=]).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([=12=]).rangeOfCharacterFromSet(letters) != nil})
我是不是忘记导入什么了?希望你能帮助我。
谢谢。
rangeOfCharacterFromSet
是众多 String
方法之一
实际上由 NSString
.
来自this commit
到 NSString.swift,似乎支持 rangeOfCharacterFromSet
最近才添加到(非 Apple)基金会图书馆,
所以在 IBM Swift Sandbox 更新为可以使用之前您不能使用它
一个新的 Swift 版本。
FWIW,现在可以在沙盒中使用 swiftlang.ng.bluemix.net/#/repl/aae5d1caf4e0a6232ff428c3a0160e6e98cba6ed913ce9176f2baee46d30cb1c
自给出这些答案以来,很多事情都发生了变化。 I've updated Pat's Sandbox answer for Swift 3.1.1。以下是 API 更改的代码和摘要。
标准库和 Foundation 中的几个方法已经重命名:
- 数组:
.reverse()
→.reversed()
- 字符串:
.rangeOfCharacterFromSet()
→.rangeOfCharacter(from:)
- (NS)字符集:
.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([=10=])
}.map { Character([=10=]) }
let reverseLetters = onlyLetters.reversed()
print("\(String(onlyLetters)) == \(String(reverseLetters))")
return String(onlyLetters) == String(reverseLetters)
}
print(palindromTest("abc"))
// false
print(palindromTest("dud"))
// true