Ich habe kürzlich erfolglos versucht, eine UIApperance
-konforme Eigenschaft zu einer meiner Swift-Klassen hinzuzufügen (ScoreView
). Sie können den entsprechenden Code siehe unten:Welche Swift-Eigenschaftstypen sind in UIAppearance-kompatiblen benutzerdefinierten Klassen zulässig?
private var gaugeThresholds = Array<GaugeThreshold?>(repeating: nil, count: ScoreView.maxGaugeIntervals)
public func gaugeThreshold(forInterval interval: Int) -> GaugeThreshold? {
return (0 <= interval && interval < ScoreView.maxGaugeIntervals) ? self.gaugeThresholds[interval] : nil
}
public func setGaugeThreshold(_ threshold: GaugeThreshold, forInterval interval: Int) {
if 0 <= interval && interval < ScoreView.maxGaugeIntervals {
self.gaugeThresholds[interval] = threshold
}
}
wo GaugeThreshold
ein Swift-Struktur ist:
public struct GaugeThreshold {
let until: Float
let color: UIColor
public init(until: Float, color: UIColor) {
self.until = until
self.color = color
}
}
Dies versagte kläglich, und der einzige Grund kann ich mir vorstellen für diese scheitern, ist die Tatsache, dass Ich verwende einen benutzerdefinierten Typ für die Eigenschaft anstelle einer der Standardtypen.
Nach UIAppearanceContainer
Dokumentation: Der Eigenschaftstyp jeder Standardtyp iOS sein kann: id
, NSInteger
, NSUInteger
, CGFloat
, CGPoint
, CGSize
, CGRect
, UIEdgeInsets
oder UIOffset
. Aber wenn Sie die list of methods and properties conforming to UIAppearance
as of iOS 8.0 durchsuchen, können Sie sehen, gibt es andere Typen, die ordnungsgemäß funktionieren als UIImage
, UIColor
... so weiß jemand, was macht einen Typ gültig für die Verwendung als UIAppearance
Eigenschaft?