无法使用“(UInt64)”类型的参数列表调用

Cannot invoke with an argument list of type '(UInt64)'

我正在构建机械臂,并打算使用 iOS 应用程序控制机械臂。我无法将位置发送到 arduino 蓝牙 4.0 屏蔽。

我正在使用滑块来控制手臂的位置。

有两个错误。

  1. "cannot invoke 'writePosition' with an argument list of type '(UInt8)'"
  2. "cannot invoke 'sendPosition' with an argument list of type '(UInt64)'"

    func sendPosition(position: UInt8)         
    if !self.allowTX {
        return
    }
    
    // Validate value
    if UInt64(position) == lastPosition {
        return
    }
    else if ((position < 0) || (position > 180)) {
        return
    }
    
    // Send position to BLE Shield (if service exists and is connected)
    if let bleService = btDiscoverySharedInstance.bleService {
        bleService.writePosition(position) ***1)ERROR OCCURS ON THIS LINE***
        lastPosition = position
    
        // Start delay timer
        self.allowTX = false
        if timerTXDelay == nil {
            timerTXDelay = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("timerTXDelayElapsed"), userInfo: nil, repeats: false)
        }
      }
    }
    
    func timerTXDelayElapsed() {
    self.allowTX = true
    self.stopTimerTXDelay()
    
    // Send current slider position
    self.sendPosition(UInt64(self.currentClawValue.value)) **2)ERROR OCCURS ON THIS LINE**
    

    }

这是我的 "writePosition" 函数。

func writePosition(position: Int8) {
    // See if characteristic has been discovered before writing to it
    if self.positionCharacteristic == nil {
        return
    }

    // Need a mutable var to pass to writeValue function
    var positionValue = position
    let data = NSData(bytes: &positionValue, length: sizeof(UInt8))
    self.peripheral?.writeValue(data, forCharacteristic: self.positionCharacteristic, type: CBCharacteristicWriteType.WithResponse)
}

我不知道我是遗漏了什么还是完全遗漏了什么。 我尝试过 UInt8 和 UInt64 之间的简单转换,但这些都没有用。

也许我遗漏了一些东西,但错误表明您正在调用 'writePosition' 使用类型为“(UInt8)”的参数列表

但是writePosition的参数列表指定了一个Int8。要么将 writePosition 的参数类型更改为 UInt8,要么将调用参数更改(或转换)为 Int8。

同样,对于 sendPosition,它需要一个 UInt8,但您发送给它的是一个 UInt64。

Swift 比较挑剔,因为它抱怨隐式类型转换。

您应该使用最适合您的数据的整数大小,或者 API 要求您使用的整数大小。

您的问题是您使用的 int 类型不同。

首先让我们检查一下writePosition方法。您使用 Int8 作为参数。因此,您需要确保还使用 Int8 作为参数调用该方法。为确保您使用的是 Int8,您可以强制转换它:

bleService.writePosition(Int8(position))

如您所见,您需要将 position 转换为 Int8

现在检查您的 sendPosition 方法。你有一个类似的问题。你想要一个 UInt8 作为参数,但是你用 UInt64 参数调用它。那是你做不到的。您需要使用相同的整数类型:

self.sendPosition(UInt8(self.currentClawValue.value))

这里也是一样。使用 UInt8 而不是 UInt64 来进行转换。