【问题标题】:Swift “UDP Read” code - unsaferawbufferpointer compile errorSwift “UDP Read” 代码 - unsaferawbufferpointer 编译错误
【发布时间】:2019-01-11 02:00:05
【问题描述】:

我相信有人可以在几秒钟内解决这个问题,但我对 swift 非常陌生,在 iPad 上使用 Playground。我正在尝试修改一些 SendUDP 代码以改为接收,但我无法解决 readResult= 行上的编译错误(unsafepointer is not convertible to unsaferawbufferpointer)。 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")
}

【问题讨论】:

    标签: swift compiler-errors udp


    【解决方案1】:

    您可以使用 Swift 的 implicit bridging 来简化为这样的:

    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
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2012-06-29
      相关资源
      最近更新 更多