私は 'RotaryWheel'という名前のカスタムUIControlサブクラスを作成しました。ジェスチャーに反応する選択ホイールです。オブジェクトの委任によって '値渡し'を強制する
ホイールの各選択は、以下のように表されます。
struct RotaryWheelSectorExternal {
let section: Int
let title: String
var item: Any?
init(section: Int, title: String, item: Any? = nil) {
self.section = section
self.title = title
self.item = item
}
}
上記は公開APIであり、消費されると内部的に表現されます。上記の構造体の両方が同じ情報が含まれているか
struct RotaryWheelSectorInternal {
let sector: Int
let minValue: Double
let midValue: Double
let maxValue: Double
let angle: Double
let title: String
var item: Any?
}
通知は、しかし、一方が他方よりも冗長です。
ロータリーホイールデリゲートは、外部表示のみを報告することにより、このデザインに忠実です。もちろん
protocol RotaryWheelControlDelegate: class {
func rotationEnded(onSector sector: RotaryWheelSectorExternal)
}
ホイールがインスタンス化し、内部されている場合、これは、外部>内部の変換が必要>外部ユーザーは、そのデリゲートに選択し、車輪制御レポートの選択になりますよう。
これは私にはうってつけのものではありませんが、私は次のことも正しく感じられないほど長くスウィフトを書いています。
class RotaryWheelSector {
let sector: Int
var minValue: Double?
var midValue: Double?
var maxValue: Double?
var angle: Double?
let title: String
var item: Any?
init...
}
これは私が考えた別のオプションです。
class RotaryWheelSectorExternal {
let section: Int
let title: String
var item: Any?
init(section: Int, title: String, item: Any? = nil) {
self.section = section
self.title = title
self.item = item
}
}
class RotaryWheelSectorInternal: RotaryWheelSectorExternal {
let minValue: Double
let midValue: Double
let maxValue: Double
let angle: Double
init(section: Int, title: String, item: Any?, min: Double, mid: Double, max: Double, angle: Double) {
self.minValue = min
self.midValue = mid
self.maxValue = max
self.angle = angle
super.init(section: section, title: title, item: item)
}
convenience init(sector: RotaryWheelSectorExternal, min: Double, mid: Double, max: Double, angle: Double) {
self.init(section: sector.section, title: sector.title, item: sector.item, min: min, mid: mid, max: max, angle: angle)
}
}
しかし、これはどちらかといえば気に入らず、どちらのアプローチをとるべきかわかりません。
これについてのご意見はありがとうございます。
私はここで何か不足しているかもしれませんが、ただひとつの構造体を使って、公開APIに公開したくないプロパティを '(ファイル)private'や' internal'としてマークしてみませんか? – Hamish
@Hamishクラスがインスタンス化されたら、min、mid、maxの値は変更しないでください。クラスが公開APIレベルでインスタンス化されている場合は、min、mid、およびmaxもそこに設定する必要があります。しかし、公的レベルは、それらの値が利用可能な場所ではありません。 –