gpt4 book ai didi

swift - 如何在 swift 2.0 中将 sockaddr_in 转换为 sockaddr?

转载 作者:搜寻专家 更新时间:2023-11-01 05:53:46 32 4
gpt4 key购买 nike

我在这里看到了这个问题: cast-sockaddr-in-to-sockaddr-in-swift 1.2

但是当我尝试在 swift 2.0 中使用这些代码时,出现错误:

var sa = sockaddr_in()
let s = socket(PF_INET,SOCK_STREAM,0)

let cn = connect(s,UnsafeMutablePointer( &sa ), sizeof(sa) )

Ambiguous use of 'init'

如何解决这个问题?

最佳答案

类似于 referenced Q&A , 你必须使用 withUnsafePointer()

var sa = sockaddr_in()
let s = socket(PF_INET,SOCK_STREAM,0)

let cn = withUnsafePointer(&sa) {
connect(s, UnsafePointer($0), socklen_t(sizeofValue(sa)))
}

另请注意,sizeofValue() 必须与一个实例一起使用一个类型,并且该值必须转换为 socklen_t正如 connect() 预期的那样。

Swift 3 更新:

let cn = withUnsafeMutablePointer(to: &sa) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
connect(s, $0, socklen_t(MemoryLayout.size(ofValue: sa)))
}
}

关于swift - 如何在 swift 2.0 中将 sockaddr_in 转换为 sockaddr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34015489/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com