Быстрый код «UDP Read» - ошибка компиляции unsaferawbufferpointer - PullRequest
0 голосов
/ 11 января 2019

Я уверен, что кто-то может решить эту проблему за считанные секунды, но я очень новичок в стремительном использовании игровых площадок на iPad. Я пытаюсь изменить некоторый код SendUDP для получения вместо этого, но я не могу решить ошибку компиляции (unsafepointer не конвертируется в unsaferawbufferpointer) в строке readResult =. SEND прекрасно работает с очень похожим кодом, но я действительно изо всех сил здесь, из моей глубины ...

Вот код

func readUDP() {
  guard
  let addresses =
    try ? addressesFor(host: "192.168.4.1", port: 80)
  else {
    print("host not found")
    return
  }
  if addresses.count != 1 {
    print("host ambiguous; using the first one")
  }
  address = addresses[0]
  fd1 = socket(Int32(address.ss_family), SOCK_DGRAM, 0)
  guard fd1 >= 0
  else {
    print("`socket` failed`")
    return
  }
  defer {
    let junk = close(fd1)
    assert(junk == 0)
  }

  var message = [UInt8](repeating: 0, count: 1024)
  let messageCount = message.count
  var readResult = message.withUnsafeBytes {
    (messagePtr: UnsafePointer < UInt8 > ) - > Int in
      return address.withSockAddr {
        (sa, saLen) - > Int in
          return recvfrom(fd1, messagePtr, messageCount, 0, sa, & saLen)
      }
  }
  guard readResult >= 0
  else {
    print("read failed")
    return
  }
  print("success")
}

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете использовать неявное мостовое соединение Swift 1002 *, чтобы упростить что-то вроде этого:

var message = [UInt8](repeating: 0, count: 1024)
  let messageCount = message.count
  var readResult = address.withSockAddr {
    (sa, saLen) - > Int in
      return recvfrom(fd1, &message, messageCount, 0, sa, &saLen)
  }
  guard readResult >= 0
  else {
    print("read failed")
    return
  }
...