Использование и возврат объектов Realm вместо статических объектов Array - PullRequest
0 голосов
/ 03 мая 2018

Обновлено с ответом для других Если у вас возникла эта проблема ...

Проблема Я хочу использовать Realm Objects, а не статический массив внутри функции для возврата вывода объекта.

Решение вам нужно настроить объект вместо структуры ....

например.

это:

class WorkoutGeneratorObject: Object {
    @objc dynamic var name = ""
    @objc dynamic var maxReps = 0

    convenience init(name: String, maxReps: Int) {
        self.init()
        self.name = name
        self.maxReps = maxReps
    }

не это:

struct WorkoutExercise : Hashable, Equatable{

let name : String
let reps : Int
var hashValue: Int {
    return name.hashValue
}

static func == (lhs: WorkoutExercise, rhs: WorkoutExercise) -> Bool {
    return lhs.name == rhs.name
}

затем отформатируйте возвращение функции следующим образом: в объекте класса :

class WorkoutGeneratorObject: Object {
    @objc dynamic var name = ""
    @objc dynamic var maxReps = 0

    convenience init(name: String, maxReps: Int) {
        self.init()
        self.name = name
        self.maxReps = maxReps
    }

    func generateExercise() -> WorkoutExercise {
        return WorkoutExercise(
            name: name,
            reps: Int(arc4random_uniform(UInt32(maxReps)))
        )
    }
}

Затем вы можете использовать это в других функциях вашего кода, например:

struct WorkoutGenerator {

// This is the "pool" of exercises from
// which it generates a workout (similar to your
// `exerciseBankArray`)
let realmExercisePool = realm.objects(WorkoutGeneratorObject.self)
let exercisePool: [WorkoutExerciseGenerator]

// Min and max amount of workouts
let minCount: Int
let maxCount: Int

// Generates a workout from the generator
func generate() -> Workout {

    let amount = Int(arc4random_uniform(UInt32(maxCount - minCount))) + minCount
    let myExercises : [WorkoutExercise] = (0..<amount).map { _ in
        // Selects an exercise generator at random
        let index = Int(arc4random_uniform(UInt32(exercisePool.count)))
        // Generates a random workout exercise from this generator

        return realmExercisePool[index].generateExercise()
    }

    return Workout(workoutExercises: myExercises)

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...