如何修复 Cannot invoke 'getBytes' with an argument list of type '([Int8])'?
How can I fix Cannot invoke 'getBytes' with an argument list of type '([Int8])'?
我正在尝试将两个 CBUUID
和 return 的结果作为布尔值进行比较。 getBytes()
方法在 Swift 4 中给出以下错误:
Cannot invoke 'getBytes' with an argument list of type '([Int8])'
func compare(_ UUID1: CBUUID, uuid2 UUID2: CBUUID) -> Bool {
let b1 = [Int8](repeating: 0, count: 128)
let b2 = [Int8](repeating: 0, count: 128)
UUID1.data.getBytes(b1)
UUID2.data.getBytes(b2)
if memcmp(b1, b2, UUID1.data.count) == 0 {
return true
}
else {
return false
}
}
我有方法的 Objective-C 工作版本:
-(int) compareCBUUID:(CBUUID *) UUID1 UUID2:(CBUUID *)UUID2 {
char b1[128];
char b2[128];
[UUID1.data getBytes:b1];
[UUID2.data getBytes:b2];
if (memcmp(b1, b2, UUID1.data.length) == 0)return 1;
else return 0;
}
我试图通过增加 b1
和 b2
的长度来修复它,但它给出了进一步的错误。
您可以使用数据方法 func copyBytes(to pointer: UnsafeMutablePointer<UInt8>, count: Int)
并传递一个 UnsafeMutablePointer,分配容量 16 并延迟释放:
func compare(_ UUID1: CBUUID, uuid2 UUID2: CBUUID) -> Bool {
let b1 = UnsafeMutablePointer<UInt8>.allocate(capacity: 16)
let b2 = UnsafeMutablePointer<UInt8>.allocate(capacity: 16)
UUID1.data.copyBytes(to: b1, count: 16)
UUID2.data.copyBytes(to: b2, count: 16)
defer {
b1.deallocate(capacity: 16)
b2.deallocate(capacity: 16)
}
return memcmp(b1, b2, UUID1.data.count) == 0
}
或者干脆
func compare(_ UUID1: CBUUID, uuid2 UUID2: CBUUID) -> Bool {
return UUID1 == UUID2
}
我正在尝试将两个 CBUUID
和 return 的结果作为布尔值进行比较。 getBytes()
方法在 Swift 4 中给出以下错误:
Cannot invoke 'getBytes' with an argument list of type '([Int8])'
func compare(_ UUID1: CBUUID, uuid2 UUID2: CBUUID) -> Bool {
let b1 = [Int8](repeating: 0, count: 128)
let b2 = [Int8](repeating: 0, count: 128)
UUID1.data.getBytes(b1)
UUID2.data.getBytes(b2)
if memcmp(b1, b2, UUID1.data.count) == 0 {
return true
}
else {
return false
}
}
我有方法的 Objective-C 工作版本:
-(int) compareCBUUID:(CBUUID *) UUID1 UUID2:(CBUUID *)UUID2 {
char b1[128];
char b2[128];
[UUID1.data getBytes:b1];
[UUID2.data getBytes:b2];
if (memcmp(b1, b2, UUID1.data.length) == 0)return 1;
else return 0;
}
我试图通过增加 b1
和 b2
的长度来修复它,但它给出了进一步的错误。
您可以使用数据方法 func copyBytes(to pointer: UnsafeMutablePointer<UInt8>, count: Int)
并传递一个 UnsafeMutablePointer,分配容量 16 并延迟释放:
func compare(_ UUID1: CBUUID, uuid2 UUID2: CBUUID) -> Bool {
let b1 = UnsafeMutablePointer<UInt8>.allocate(capacity: 16)
let b2 = UnsafeMutablePointer<UInt8>.allocate(capacity: 16)
UUID1.data.copyBytes(to: b1, count: 16)
UUID2.data.copyBytes(to: b2, count: 16)
defer {
b1.deallocate(capacity: 16)
b2.deallocate(capacity: 16)
}
return memcmp(b1, b2, UUID1.data.count) == 0
}
或者干脆
func compare(_ UUID1: CBUUID, uuid2 UUID2: CBUUID) -> Bool {
return UUID1 == UUID2
}