php 字符串到 Swift 4 中的数字

标签 php swift swift4

我发现这个 PHP 函数可以将字符串编码和解码为数字。 https://stackoverflow.com/a/8087840/10081776

就像一个魅力。我只能在 php 中使用它。但我在 swift4 中也需要这个功能,但我不知道该怎么做。

我尝试了以下代码,但我不知道如何完成。

func toNumbers() -> String{
        let str = "abcdefg"
        let numbers = String(format: "%03d", str)
        let output = numbers + ??
        return numbers
    }



func backToString() -> String{
    let numbers = "1234560000"
    let str = ?
    return str
}

感谢您的快速帮助,祝周末愉快。

最佳答案

引用的 PHP 函数返回一个包含 3 个十进制数字的字符串 源字符串中的每个 UTF-8 代码单元。在 Swift 中会是

func toNumbers(_ s: String) -> String {
    return s.utf8.map { String(format: "%03d", $0) }.joined()
}

逆向转换稍微复杂一点,因为Swift没有 PHP str_split() 对应的内置函数。 我们必须以 3 的步骤迭代索引,并转换 每个切片到一个字节:

func backToString(_ n: String) -> String? {
    var utf8 = Data()
    var from = n.startIndex
    while from < n.endIndex {
        guard let to = n.index(from, offsetBy: 3, limitedBy: n.endIndex) else { return nil }
        guard let u = UInt8(n[from..<to]) else { return nil }
        utf8.append(u)
        from = to
    }
    return String(data: utf8, encoding: .utf8)
}

该函数返回一个可选,因为转换可能会失败。

示例用法:

let s = "Wörks wíth all ストリングズ"
let n = toNumbers(s)
print(n) // 087195182114107115032119195173116104032097108108032227130185227131136227131170227131179227130176227130186
if let s2 = backToString(n) {
    print(s2) // Wörks wíth all ストリングズ
}

只是为了好玩:第二个函数的更紧凑版本:

func backToString(_ n: String) -> String? {
    return String(bytes: sequence(state: n.startIndex, next: { (from: inout String.Index) -> UInt8?  in
        guard let to = n.index(from, offsetBy: 3, limitedBy: n.endIndex) else { return nil }
        defer { from = to }
        return UInt8(n[from..<to])
    }), encoding: .utf8)
}

关于php 字符串到 Swift 4 中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51341687/

相关文章:

php - 我将如何使用 PHP 来处理占位符 div,然后是 "overwritten"?

php - Grocery Crud 中两个字段作为一个独特字段

swift - 在调用方法之前添加 subview

ios - 从数组中获取字典数据

swift - JSONSerialization.jsonObject 不接受我的参数

php - 如何在 Laravel 中获取原始表单数据?

php - 返回或回显 View 有什么区别?返回 View 比 echo View 说话的时间更长

macos - 如何从终端为用 Swift 编写的应用程序构建可执行文件?

ios - 在 iphone 和 Apple Watch 之间共享对象数组

ios - 条件绑定(bind)的初始化程序必须具有可选类型,而不是 'AVCaptureVideoPreviewLayer'