
var sock: CInt = ...var rin: sockaddr_invar rlen = socklen_t(sizeof(sockaddr_in))var buffer: CChar[] = CChar[](count: 128,repeatedValue: 0)let len = recvfrom(sock,&buffer,128,&rin,&rlen)
编译器在recvfrom上抱怨(非常密码)关于& rin是指向sockaddr_in而不是sockaddr的指针.我尝试了各种方法来转换指针类型,但我似乎无法做到这一点.
如果我声明它是一个sockaddr我可以让它编译,但后来我不能把它看作sockaddr_in.
解决方法 更新:从Swift 1.2(Xcode 6.3 beta)开始,初始化C结构变得简单得多:
var rin = sockaddr_in()
定义sockaddr_in变量并将所有元素初始化为零.
将sockaddr_in的地址转换为地址
sockaddr完成如下:
let len = withUnsafeMutablePointer(&rin) { recvfrom(sock,UInt(buffer.count),UnsafeMutablePointer(func initStruct<S>() -> S { let struct_pointer = UnsafeMutablePointer<S>.alloc(1) let struct_memory = struct_pointer.move() struct_pointer.dealloc(1) return struct_memory}),&rlen)} 旧答案:第一个问题是sockaddr_in变量必须在之前初始化
它的地址可以传递给recvfrom().在Swift中初始化复杂的结构
比较,似乎很笨拙
> Swift: Pass Uninitialized C Structure to Imported C function.
使用辅助函数
https://stackoverflow.com/a/24335355/1187415:
var rin : sockaddr_in = initStruct()
套接字地址可以初始化为
let len = recvfrom(sock,reinterpretCast(&rin),&rlen)
要将sockaddr_in指针强制转换为sockaddr指针,请使用reinterpretCast().
总结以上是内存溢出为你收集整理的如何在swift中将sockaddr_in转换为sockaddr全部内容,希望文章能够帮你解决如何在swift中将sockaddr_in转换为sockaddr所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)