![](/img/trans.png)
[英]Converting a Swift UnsafePointer<AudioStreamBasicDescription> to a Dictionary?
[英]converting ObjC to Swift - UnsafePointer<Void> not convertible to struct type
我下面的教程寫在Objective-C 在這里 ,我已經轉換最事情迅速,但有些線路是不會工作。
例如,我已經轉換了以下結構:
typedef struct {
MessageType messageType;
} Message;
typedef struct {
Message message;
} MessageMove;
對此:
struct Message {
var messageType:MessageType
}
struct MessageMove {
var message:Message
}
在另一行中,本教程執行以下操作:
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data
fromPlayer:(NSString *)playerID {
Message *message = (Message*)[data bytes];
if (message->messageType == kMessageTypeMove) {
MessageMove *messageMove = (MessageMove*) [data bytes];
}
}
我已經嘗試將此更改為以下內容:
func matchDidReceiveDataFromPlayer(match: GKMatch, data: NSData, player: GKPlayer) {
//1
var message = data.bytes as Message //DOESNT WORK
if (message.messageType == MessageType.kMessageTypeGameBegin)
//2
var messageMove = data.bytes as MessageMove //WORKS
}
但第一個演員(// 1)不起作用,它說如下:
UnsafePointer<Void> not convertible to Message
然而第二個演員(// 2)有效。 是因為我正在檢查if語句中的消息類型嗎?
有想法該怎么解決這個嗎?
是因為我正在檢查if語句中的消息類型嗎?
不,這是因為,由於//1
上的第一個錯誤,編譯器永遠不會到達第二行//2
。 如果編譯器達到它,你會得到同樣的錯誤。
現在讓我們談談語法。 如果您確實認為data.bytes
與Message實例相同,您會說:
let message = UnsafePointer<Message>(data.bytes).memory
但是,我個人更傾向於懷疑從Objective-C獲得的數據是否構成Swift結構! 畢竟,Objective-C端的內容可能是C結構 ,它是一種不同的動物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.