如何修复 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;
}

我试图通过增加 b1b2 的长度来修复它,但它给出了进一步的错误。

您可以使用数据方法 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
}