微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Swift中将Character转换为UInt8

我在 swift中有一系列角色:

static let chararray: [Character] = [ "S","t","r","i","n","g"]

我想对每个字符进行一些按字节操作作为字节(UInt8).例如,如何将chararray [0]转换为UInt8?

解决方法

您需要通过Character:s的String表示转换为UInt8.但是,您无需在[Character] – >中显式初始化数组. [UInt8]转换;因为String.UTF8View(来自String.utf8)是一个CollectionType,你可以对String.UTF8View本身应用一个map操作;使用UInt8初始化.即,

let chararray: [Character] = [ "S","g"]
let asUInt8Array = String(chararray).utf8.map{ UInt8($0) }

print(asUInt8Array)
/* [83,116,114,105,110,103] */

print(asUInt8Array.dynamicType)
/* Array<UInt8> */

关于你的下面的评论(“与Swift的抽象相比,与Objective-C的简单方式相比受挫”):如果你认为上面的内容很混乱,你可以将它包含在SequenceType的扩展中,约束到Character元素,允许在实践中更容易使用.例如.:

extension SequenceType where Generator.Element == Character {

    /* extension accessible as function */
    func asByteArray() -> [UInt8] {
        return String(self).utf8.map{UInt8($0)}
    }

    /* or,as @LeoDabus pointed out below (thanks!),use a computed property for this simple case  */
    var byteArray : [UInt8] {
        return String(self).utf8.map{UInt8($0)}
    }
}

用法示例:

let chararray: [Character] = [ "S","g"]

/* use extension function */
let asUInt8Array = chararray.asByteArray()

/* or computed property */
let asUInt8Array = chararray.byteArray

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐