J'ai récemment essayé sans succès d'ajouter une propriété conforme UIApperance
à une de mes classes Swift (ScoreView
). Vous pouvez voir le code correspondant ci-dessous:Quels types de propriétés Swift sont autorisés dans les classes personnalisées compatibles UIApperance?
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
}
}
où GaugeThreshold
est une struct Swift:
public struct GaugeThreshold {
let until: Float
let color: UIColor
public init(until: Float, color: UIColor) {
self.until = until
self.color = color
}
}
Ce échouait lamentablement, et la seule raison pour laquelle je peux penser à cet échec est le fait que J'utilise un type personnalisé pour la propriété au lieu de l'un des types standard.
Selon UIAppearanceContainer
documentation: Le type de propriété peut être tout type iOS standard: id
, NSInteger
, NSUInteger
, CGFloat
, CGPoint
, CGSize
, CGRect
, UIEdgeInsets
ou UIOffset
. Mais si vous parcourez le list of methods and properties conforming to UIAppearance
as of iOS 8.0, vous pouvez voir qu'il y a d'autres types qui fonctionnent correctement comme UIImage
, UIColor
... donc quelqu'un sait ce qui rend un type valide pour être utilisé comme propriété UIAppearance
?