gpt4 book ai didi

linux - 如何在 Linux 上使用 swift 在 CFString 和 String 之间进行转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:17 25 4
gpt4 key购买 nike

我想在 Linux 上用 swift 将一些拉丁字符串转换成英文(拼音),所以我写了一个函数,但它似乎有一些错误。在mac os上可以在xcode中运行,但是在linux上会出错。我认为转换有问题在 CFString 和字符串之间。我不知道那是什么。有人能帮我吗?谢谢

import Foundation
#if os(Linux)
import CoreFoundation
import Glibc
#endif
public extension String{
func transformToLatinStripDiacritics() -> String{
let nsStr = NSMutableString(string: self)
let str = unsafeBitCast(nsStr, to: CFMutableString.self)
if CFStringTransform(str, nil, kCFStringTransformToLatin, false){
if CFStringTransform(str, nil, kCFStringTransformStripDiacritics, false){
let s = String(describing: unsafeBitCast(str, to: NSMutableString.self) as NSString)
return s
}
return self
}
return self
}

最佳答案

就我在 IBM Swift Sandbox 上的尝试而言,CFStringTransform 不适用于任意 CFMutableString。似乎它需要基于 UTF-16 表示的 CFMutableString

import Foundation
#if os(Linux)
import CoreFoundation
import Glibc
#endif
public extension String {
func transformToLatinStripDiacritics() -> String{
let chars = Array(self.utf16)
let cfStr = CFStringCreateWithCharacters(nil, chars, self.utf16.count)
let str = CFStringCreateMutableCopy(nil, 0, cfStr)!
if CFStringTransform(str, nil, kCFStringTransformToLatin, false) {
if CFStringTransform(str, nil, kCFStringTransformStripDiacritics, false) {
return String(describing: str)
}
return self
}
return self
}
}

print("我在大阪住".transformToLatinStripDiacritics()) //->wo zai da ban zhu

仅针对几个示例进行了测试。因此,这可能不是您问题的最佳解决方案。

关于linux - 如何在 Linux 上使用 swift 在 CFString 和 String 之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com