Swift, 只反转字母

Swift, Reverse only letters

我遇到了问题。当我尝试使用双指针模式仅反转 swift 中的字母时,它实际上是在进行交换。 示例 - 测试 123 字符串 2 指针输出 - gnir 123 tStseT 预期输出 - tseT 123 gnirtS 有人可以建议这个方法,或者给出代码示例吗?

func reverseOnlyLetters(_ S: String) -> String {
   
    var a = Array(S.unicodeScalars)
    
    var i = 0
    var j = a.count - 1
    
    while i < j {
        while !CharacterSet.letters.contains(a[i]) && i < j { i += 1 }
        while !CharacterSet.letters.contains(a[j]) && i < j { j -= 1 }
        
        let t = a[i]
        a[i] = a[j]
        a[j] = t
        i += 1
        j -= 1
    }
    
    var ret = ""
    a.forEach({ ret += String(Character(UnicodeScalar([=11=]))) })
    return ret
}

试试这个:

func reverseOnlyLetters(_ S: String) -> String {
    let components = S.components(separatedBy: " ")
    let reversedComponents = components.map { Int([=10=]) == nil ? String([=10=].reversed()) : [=10=] }
    return reversedComponents.joined(separator: " ")
}

如果还是不对,请给我更多信息