Скрыть ObjectId в объект String SwiftUI Realm

У меня есть моя модель под названием Ресторан: объект области на котлине:

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)"

Во-первых, посмотрите мой ответ ниже, а во-вторых, что вы хотите сделать со строкой ObjectId? Часто вместо преобразования значений в строки можно использовать ссылку на сам объект.

Jay 17.11.2022 19:04

Я хочу отправить _id в качестве параметра в другое представление

user20468094 17.11.2022 19:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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 работать не будет..

user20468094 17.11.2022 19:27

@DhanDaniel Мои извинения - я проглядел SwiftUI. Я обновил ответ как для Swift, так и для SwiftUI.

Jay 17.11.2022 20:29

Он все еще дает ту же ошибку, я обновил исходный пост с печатью и всем кодом: Value of type 'any Library_baseObjectId' has no member toHexString

user20468094 17.11.2022 20:40

@DhanDaniel Я думаю, ты ответил на неправильный ответ, лол. В любом случае toHexString не является синтаксисом или функцией Swift. В любом случае нет причин использовать Hex - вы можете просто использовать String, как показано в моем ответе.

Jay 17.11.2022 20:45

то же самое для строки, я приложил фото, та же проблема со строковым значением, вы можете увидеть фото вверху

user20468094 17.11.2022 20:53

@DhanDaniel Это Котлин или Свифт? Это Swift в вопросе. Я обновил свой ответ моделью SwiftUI Realm... это работает?

Jay 17.11.2022 21:06

Это мультиплатформа Kotlin, объекты в kotlin, но код, который я написал, — swiftui.

user20468094 17.11.2022 21:26

@DhanDaniel Вы пробовали ObjectId.toString()?

Jay 18.11.2022 21:00

Я создал геттер в классе

user20468094 18.11.2022 21:01

@DhanDaniel Если это работает, опубликуйте это как ответ, так как я считаю, что это будет полезно другим.

Jay 18.11.2022 21:05
Ответ принят как подходящий

Я решил это, добавив геттер в класс:

class Restaurant : RealmObject {
    @PrimaryKey
    var _id: ObjectId = ObjectId.create()
    var name: String = ""
    var adress: String? = null

    fun getID() : String{
            return _id.toString()
        }
}

Большой! Рад, что мое предложение toString() сработало! Голосуйте за вас.

Jay 19.11.2022 14:29

Другие вопросы по теме