Ios Cocoa异步套接字教程代码从Swift 2到Swift 3的转换
我正在学习Swift 2 Cocoa异步套接字教程,该教程是从Swift 2下载的,是用Swift 2编写的,我正在使用Xcode 8/Swift 3。转换似乎相当好,只有一些更正,除了一个地方,我似乎无法作出必要的更正 原始Swift 2代码:Ios Cocoa异步套接字教程代码从Swift 2到Swift 3的转换,ios,swift3,swift2,bonjour,code-conversion,Ios,Swift3,Swift2,Bonjour,Code Conversion,我正在学习Swift 2 Cocoa异步套接字教程,该教程是从Swift 2下载的,是用Swift 2编写的,我正在使用Xcode 8/Swift 3。转换似乎相当好,只有一些更正,除了一个地方,我似乎无法作出必要的更正 原始Swift 2代码: func socket(_ sock: GCDAsyncSocket!, didRead data: Data!, withTag tag: Int) { if tag == 1 { var bodyLength: Int1
func socket(_ sock: GCDAsyncSocket!, didRead data: Data!, withTag tag: Int)
{
if tag == 1 {
var bodyLength: Int16 = 0
data.getBytes(&bodyLength, length: sizeof(Int16))
print("Header received with bodylength: \(bodyLength)")
socket.readDataToLength(UInt(bodyLength), withTimeout: -1, tag: 2)
} else if tag == 2 {
let packet = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! Packet
PacketHandler.HandlePacket(packet)
socket.readDataToLength(UInt(sizeof(Int16)), withTimeout: -1, tag: 1)
socket.readData(toLength: UInt(MemoryLayout<Int16>.size), withTimeout: -1, tag: 1)
}
}
结果是“致命错误:在展开可选值时意外发现nil”。我一直在看有关Swift 3中关于获取“sizeof”数据的更改的帖子,不确定对“MemoryLayout”的更改是否正确。此外,我还尝试了以下一些更改,涉及对NSKeyedUnachiver.unarchiveObjectWithData功能的使用进行Swift 3更改,但这些更改也不能提供有效的解决方案
如能提供任何帮助或指明转换解决方案的位置,将不胜感激
print(MemoryLayout<Data>.size == 8)
你确定这就是你所期望的吗?它是数据类型的大小,而不是存储的字节数
数据的大小(例如)
印刷品
true
10
你确定这就是你所期望的吗?它是数据类型的大小,而不是存储的字节数
数据的大小(例如)
印刷品
true
10
请,请,请停止使用
代码>强制展开对象。导致此错误的原因是,您正在强制展开对象,但未正确处理这些对象可能为nil
。您的对象应该是可选的或非空的。如果继续使用,您将继续遇到这样的崩溃代码>。这不是安全代码。请,请,请停止使用代码>强制展开对象。导致此错误的原因是,您正在强制展开对象,但未正确处理这些对象可能为nil
。您的对象应该是可选的或非空的。如果继续使用,您将继续遇到这样的崩溃代码>。这是不安全的代码。感谢您的回复-我正在查找套接字数据包第二部分中存储的字节数。然后,必须在tag==2段中“解包”此数据包,在该段中,它使用“NSKeyedUnarchiver.unarchiveObject(with:data)”过程还原原始对象。在Swift 3中处理这一问题的方式似乎发生了重大变化,即使在做了相当多的研究和阅读之后,我也不完全清楚如何让Swift 3正确处理这一问题。提前感谢您的帮助。感谢您的回复-我正在查找套接字数据包第二部分中存储的字节数。然后,必须在tag==2段中“解包”此数据包,在该段中,它使用“NSKeyedUnarchiver.unarchiveObject(with:data)”过程还原原始对象。在Swift 3中处理这一问题的方式似乎发生了重大变化,即使在做了相当多的研究和阅读之后,我也不完全清楚如何让Swift 3正确处理这一问题。提前感谢您的帮助。
10