ios 在Swift中迭代字母表

qaxu7uf2  于 2022-12-20  发布在  iOS
关注(0)|答案(9)|浏览(160)

在Obj-C中,可以使用以下语句迭代字母表:

for (char x='A'; x<='Z'; x++) {

在Swift中这是不可能的。你知道我该怎么做吗?

lsmepo6l

lsmepo6l1#

在Swift中,你可以像这样迭代字符串:

雨燕2

for char in "abcdefghijklmnopqrstuvwxyz".characters {
    println(char)
}

雨燕1.2

for char in "abcdefghijklmnopqrstuvwxyz" {
    println(char)
}

也许有更好的办法。

xcitsw88

xcitsw882#

这有点麻烦,但下面的代码是有效的(Swift 3/4):

for value in UnicodeScalar("a").value...UnicodeScalar("z").value { print(UnicodeScalar(value)!) }

我怀疑这里的问题是,对于不同的字符串编码,“a”...“z”的含义可能会有所不同。
(老东西)
也很麻烦,但没有额外的中间变量:

for letter in map(UnicodeScalar("a").value...UnicodeScalar("z").value, {(val: UInt32) -> UnicodeScalar in return UnicodeScalar(val); })
    {
        println(letter)
    }
evrscar2

evrscar23#

for i in 97...122{println(UnicodeScalar(i))}
r8uurelv

r8uurelv4#

Swift 4.2版本更简单

for char in "abcdefghijklmnopqrstuvwxyz" {
    print(char)
}
eeq64g8w

eeq64g8w5#

针对Swift 3.0及更高版本进行了更新

let startChar = Unicode.Scalar("A").value
let endChar = Unicode.Scalar("Z").value

for alphabet in startChar...endChar {

    if let char = Unicode.Scalar(alphabet) {

        print(char)
    }
}
f8rj6qna

f8rj6qna6#

详情

  • 斯威夫特5.3
  • 版本12.4(12D4e)

溶液

extension ClosedRange where Bound == UnicodeScalar {
    func toArray() -> [UnicodeScalar] {
        (lowerBound.value...upperBound.value).compactMap { UnicodeScalar($0) }
    }
}

extension ClosedRange where Bound == String {
    func toArray() -> [UnicodeScalar]? {
        guard let lower = lowerBound.first?.unicodeScalars.first,
              let upper = upperBound.first?.unicodeScalars.first else { return nil }
        return (lower...upper).toArray()
    }
}

用法

("a"..."z").toArray() // option 1
(UnicodeScalar("a")...UnicodeScalar("z")).toArray() // option 2
vuktfyat

vuktfyat7#

此解决方案适用于Swift 3.0,并将根据OP请求打印出值:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.flatMap { print($0) }

或者为您提供一个字母数组:

let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.flatMap { $0.description }
sg24os4d

sg24os4d8#

“纯功能性”Swift 5方式:

(Unicode.Scalar("A").value...Unicode.Scalar("Z").value).forEach({
    let letter = Unicode.Scalar($0)!
    print(letter)
    /* do other stuff with letter here */
})
6vl6ewon

6vl6ewon9#

你试过这个吗?

for var myChar:CChar = 65 ; myChar <= 90 ; ++myChar {
      let x:String = String(format: "%c", myChar)
      println(x)
}

如果您已经知道字符代码

相关问题