У меня есть моя модель под названием Ресторан: объект области на котлине:
class Restaurant : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId.create()
var name: String = ""
var adress: String? = null
}
Я хочу использовать свойство _id. Но для этого мне нужно преобразовать в строку в SwiftUI
Пробовал: restaurant_id as! String, не работает,
Это связано с этим постом: https://www.mongodb.com/community/forums/t/swift-convert-objectid-to-string/121829
Там нет реальных ответов
Любые другие решения?
ошибка при использовании .toHexString(): Value of type 'any Library_baseObjectId' has no member 'toHexString':
тип _id в этом случае:
Ошибка при попытке: "\(restaurant._id.stringValue)"
Я хочу отправить _id в качестве параметра в другое представление





ObjectID в Swift имеют свойство stringvalue, которое возвращает ObjectID в виде строки.
Вы могли бы сделать это
let idAsAsString = someRealmObject._id.stringValue
Или для kotlin и других SDK; пусть idAsString = object._id.toString()
В SwiftUI к идентификатору можно получить доступ аналогичным образом, а затем использовать значение для инициализации новой строки.
let x = someRealmObject._id.stringValue
let y = String(stringLiteral: x)
let _ = print(x, y)
Text("\(x) \(y)")
и выход будет
6376886a1dbb3c142318771c 6376886a1dbb3c142318771c
в консоли и то же самое в текстовом интерфейсе
Вот некоторый SwiftUI, показывающий использование
List {
ForEach(myModel) { model in
NavigationLink(destination: SecondView(navigationViewIsActive: $navigationViewIsActive, selectedEntryToShow: model))
{
Text("\(model._id.stringValue)") //ormodel._id.toString()
}
}
}
Эта модель Swift работает отлично, и строку ObjectId можно прочитать, как указано выше.
class Restaurant: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var name: String = ""
@Persisted var adress: String? = null
}
В swiftui он транслируется не в ObjectId, а в Library_baseObjectId, так что в данном случае stringValue работать не будет..
@DhanDaniel Мои извинения - я проглядел SwiftUI. Я обновил ответ как для Swift, так и для SwiftUI.
Он все еще дает ту же ошибку, я обновил исходный пост с печатью и всем кодом: Value of type 'any Library_baseObjectId' has no member toHexString
@DhanDaniel Я думаю, ты ответил на неправильный ответ, лол. В любом случае toHexString не является синтаксисом или функцией Swift. В любом случае нет причин использовать Hex - вы можете просто использовать String, как показано в моем ответе.
то же самое для строки, я приложил фото, та же проблема со строковым значением, вы можете увидеть фото вверху
@DhanDaniel Это Котлин или Свифт? Это Swift в вопросе. Я обновил свой ответ моделью SwiftUI Realm... это работает?
Это мультиплатформа Kotlin, объекты в kotlin, но код, который я написал, — swiftui.
@DhanDaniel Вы пробовали ObjectId.toString()?
Я создал геттер в классе
@DhanDaniel Если это работает, опубликуйте это как ответ, так как я считаю, что это будет полезно другим.
Я решил это, добавив геттер в класс:
class Restaurant : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId.create()
var name: String = ""
var adress: String? = null
fun getID() : String{
return _id.toString()
}
}
Большой! Рад, что мое предложение toString() сработало! Голосуйте за вас.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Во-первых, посмотрите мой ответ ниже, а во-вторых, что вы хотите сделать со строкой ObjectId? Часто вместо преобразования значений в строки можно использовать ссылку на сам объект.