Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php字符串到Swift 4中的数字_Php_Swift_Swift4 - Fatal编程技术网

php字符串到Swift 4中的数字

php字符串到Swift 4中的数字,php,swift,swift4,Php,Swift,Swift4,我发现这个PHP函数可以将字符串编码和解码为数字。 工作起来很有魅力。我只能在php中使用它。但是我在swift4中也需要这个函数,但是我不知道怎么做 我尝试了以下代码,但不知道如何完成 func toNumbers() -> String{ let str = "abcdefg" let numbers = String(format: "%03d", str) let output = numbers + ?? retu

我发现这个PHP函数可以将字符串编码和解码为数字。

工作起来很有魅力。我只能在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代码单元。在斯威夫特,那将是

func toNumbers(_ s: String) -> String {
    return s.utf8.map { String(format: "%03d", $0) }.joined()
}
反向转换有点复杂,因为Swift没有 与PHP
str\u 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)
}
只是为了好玩:第二个功能的更紧凑版本:

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)
}
func backToString(\un:String)->String?{
返回字符串(字节:序列(状态:n.startIndex,下一步:{(from:inout String.Index)->UInt8?in
guard let to=n.index(from,offsetBy:3,limitedBy:n.endIndex)else{return nil}
延迟{from=到}
返回UInt8(n[从。。
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)
}