我在
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] 举报,一经查实,本站将立刻删除。