【问题标题】:Using IBM Swift Sandbox and rangeOfCharacterFromSet使用 IBM Swift Sandbox 和 rangeOfCharacterFromSet
【发布时间】:2015-12-13 19:45:53
【问题描述】:

我正在 IBM 的新 Swift 在线沙盒上尝试 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})

我是否忘记导入某些内容?希望你能帮助我。

谢谢。

【问题讨论】:

    标签: swift nsstring ibm-swift-sandbox


    【解决方案1】:

    rangeOfCharacterFromSet 是众多String 方法之一 实际上由NSString处理。

    来自this commit 到 NSString.swift,似乎支持rangeOfCharacterFromSet 仅在最近才添加到(非 Apple)基础库中, 所以在 IBM Swift Sandbox 更新为使用之前,您无法使用它 一个新的 Swift 版本。

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      自从给出这些答案后,很多事情都发生了变化。 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($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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多