2017-06-08 4 views
0

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?

Antwort

0

Natürlich, nichts wie eine Veröffentlichung in StackOverflow, um die Antwort fünf Minuten später herauszufinden. Es stellt sich heraus, dass der Schlüssel der id Typ ist. Ändern

public struct GaugeThreshold { ... 

zu

public class GaugeThreshold: NSObject { ... 

hat den Trick.

Verwandte Themen