我想使用 struct 為我的 iOS 應用程式創建模型,因為我知道這是做事的適當方式。我有以下內容:
protocol Exercise: Identifiable {
var id: UUID { get }
var name: String { get }
var type: ExerciseType { get }
}
enum ExerciseType {
case duration
case reps
case rest
}
extension Exercise {
var id: UUID { UUID() }
}
struct DurationExercise: Exercise {
let name: String
let durationInSeconds: Int
let type: ExerciseType = .duration
}
struct RepetionsExercise: Exercise {
let name: String
let reps: Int
let type: ExerciseType = .reps
}
struct RestExercise: Exercise {
let name: String
let durationInSeconds: Int
let type: ExerciseType = .rest
}
這是否擴展了初始化
id: UUID使用協議 結構的正確方法?有沒有一種方法我不必
name: String在每個繼承的結構中指定Exercise?或者如果我想做一些我應該使用的事情
class?
uj5u.com熱心網友回復:
考慮到您有一組固定的鍛煉型別,完全消除該協議會更簡單:
struct Exercise: Identifiable {
var id: UUID
var name: String
var type: ExerciseType
enum ExerciseType {
case duration(TimeInterval)
case reps(Int)
case rest(TimeInterval)
}
}
如果您需要其中一種型別的多個關聯值,您可以選擇引入另一個struct來保存多個值。例子:
struct Exercise: Identifiable {
var id: UUID
var name: String
var type: ExerciseType
enum ExerciseType {
case duration(TimeInterval)
case reps(Reps)
case rest(TimeInterval)
}
struct Reps {
var sets: Int
var repsPerSet: Int
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/420324.html
標籤:
上一篇:在繼承中使用解構式
