在符合 UIApperance 的自定义类中允许哪些 Swift 属性类型?

Posted

技术标签:

【中文标题】在符合 UIApperance 的自定义类中允许哪些 Swift 属性类型?【英文标题】:What Swift property types are allowed in UIApperance compliant custom classes? 【发布时间】:2017-06-08 07:26:13 【问题描述】:

我最近尝试向我的一个 Swift 类 (ScoreView) 添加符合 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
    

GaugeThreshold 是一个 Swift 结构体:

public struct GaugeThreshold 
    let until: Float
    let color: UIColor

    public init(until: Float, color: UIColor) 
        self.until = until
        self.color = color
    

这失败得很惨,我能想到的失败的唯一原因是我为属性使用了自定义类型而不是标准类型之一

根据UIAppearanceContainer文档:属性类型可以是任何标准的ios类型:idNSIntegerNSUIntegerCGFloatCGPointCGSizeCGRect、@987654335 @ 或 UIOffset。但是,如果您浏览list of methods and properties conforming to UIAppearance as of iOS 8.0,您会发现还有其他类型可以正常工作,例如UIImageUIColor... 那么有人知道是什么让一个类型可以用作UIAppearance 属性吗?

【问题讨论】:

【参考方案1】:

当然,没有什么比在五分钟后发布到 *** 来找出答案更重要的了。原来关键是id 类型。改变

public struct GaugeThreshold  ...

public class GaugeThreshold: NSObject  ...

成功了。

【讨论】:

以上是关于在符合 UIApperance 的自定义类中允许哪些 Swift 属性类型?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.iOS UIApperance setDefaultTextAttributes

CoreData 类的自定义方法

表格视图显示为空而不符合我的自定义单元格

每个 View Controller 中应用的自定义导航栏图像,不符合 NSUserDefaults 同步

符合自己业务场景的自定义表单自定义报表及自定义图表

符合自己业务场景的自定义表单自定义报表及自定义图表