Protobuf неправильно возвращает true для свойства, которое не было / не должно быть декодировано - PullRequest
0 голосов
/ 03 декабря 2018

Это мои протофайлы:

message ChatJoinReq {
    string other_user_identifier = 1;
    int32 message_request_count = 2;
}

message ConversationListReq {
    Location location = 1;
    uint32 conversation_request_count = 2;
}

message Location {
    double latitude = 1;
    double longitude = 2;
}

Вот как я создаю запрос для ChatJoinReq объекта

var chatJoinReq = Benji_Client_ChatJoinReq()

chatJoinReq.otherUserIdentifier = "ullam"
chatJoinReq.messageRequestCount = 1

let data = try! chatJoinReq.serializedData()

Я очень удивлен, что это оценивается как true:

let message = try! ConversationListReq(serializedData: data)
print(message.hasLocation) // true

Как?Это происходит для некоторых имен (включая «ульлам»).Когда я изменяю имя на «test», оно вылетает, потому что не может закодировать сообщение (что хорошо! Или hasLocation должно иметь значение false).

Почему «ullam» может бытьзакодировано, и сообщение имеет свойство location, явно установленное, в то время как имя 'test' вообще не может быть закодировано? Какая разница в имени?

...