簡體   English   中英

將ObjC轉換為Swift - UnsafePointer <Void> 不可轉換為結構類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM