arrays - 可以使用循环计算变量的 Swift 扩展?
问题描述
我想在 Swift 中“漂亮地打印”一个整数数组作为十六进制。我将以下内容作为 Array 的扩展工作。但我只能找到一种方法arr.toHex()
来工作,而不是arr.toHex
像我想做的那样。我想知道这是否可能。
其次,实际上我想以arr as Hex
某种方式定义和定义 Hex。但不知道怎么做。
第三,在我的工作示例中,我需要强制转换为 Int 才能使其正常工作。但有时它会是一个Array(Uint8)
,而这个铸造不起作用。我应该使用可选的吗?
我正在使用最新的 Swift。
let arr = [255, 255, 128, 64, 16]
extension Array {
func asHex() -> String {
var res = "0x"
for el in self {
res.append(String(format:"%02X", el as! Int) + " ")
}
return res
}
}
print(arr.asHex())
// output: 0xFF FF 80 40 10
// would wonder whether the looping function could make into a calculated variable like this:
print(arr.asHex)
// should generate same output
// and ultimately:
print(arr as Hex)
// I have no idea how to do this
更新:
结合我非常接近的答案,但我无法按照我的计划让它在一个“一个班轮”中[Int]
工作。[UInt8]
我这样做是为了满足这两种类型(比如Element in [Int, UInt8]
:
extension Array where Element == Int {
var asHex: String { "0x" + self.map { String(format: "%02X", $0) }.joined(separator: " ")
}
}
extension Array where Element == UInt8 {
var asHex: String { "0x" + self.map { String(format: "%02X", $0) }.joined(separator: " ")
}
}
print( [Int(12), Int(255)].asHex ) //0x0C FF
print( [UInt8(12), UInt8(255)].asHex ) //0x0C FF
我现在明白Int
and UInt8
are BinaryInteger
s 并且$0
字符串的格式是 a CVarArg
。extension Array where Element: BinaryInteger
出于这个原因,自从$0
投诉以来我无法使用。不过一定有办法。如此接近(并且学到了很多东西)
解决方案
要将您的函数转换为计算属性,请使用以下命令:
extension Array where Element == Int {
var asHex: String {
return self.map { String(format: "%02X", $0) }.joined(separator: " ")
}
}
不要追求arr as Hex
路线,铸造不是解决这个问题的正确工具。
推荐阅读
- python - 使用数组索引训练网络(tensorflow)
- c# - 在两个值之间获取 n 个不同的随机数,其和等于给定数
- python - django:无法通过单击提交按钮调用 python 函数
- python - how to add add new row for each distinct ID in pandas?
- eclipse - 缺少工件 com.google.appengine:appengine-tools-sdk:jar:${appengine.sdk.version}
- python - How To Edit ManyToManyField In Django Admin list Display Page?
- roku - Use LabelList or MarkupList to render two labels for each content node?
- python - Pandas groupby find common strings
- c# - How to get ApplicationDbContext instance in AccountController for ASP .NET Core 2.0 With Individual Authentication?
- selenium - how to execute Cucumber Step defination with TestNG annotation