【问题标题】:Two init functions with UIColor iosUIColor ios的两个init函数
【发布时间】:2017-03-21 13:21:36
【问题描述】:

我正在为标签应用颜色,发现我们有两个函数在做同样的事情。 谁能解释一下这两个功能需要什么,为什么我们不能只有一个功能?

通常使用:

public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

我去 UIColor 课时看到的:

required public convenience init(colorLiteralRed red: Float, green: Float, blue: Float, alpha: Float)

这两个功能有优缺点吗?

另外,最好的调用方式是什么:

  1. footerView.backgroundColor = UIColor(red: 178/255, green: 178/255, blue: 178/255, alpha: 1)

  2. footerView.backgroundColor = UIColor(colorLiteralRed: 178/255, green: 178/255, blue: 178/255, alpha: 1)

  3. footerView.backgroundColor = UIColor.init(colorLiteralRed: 178/255, green: 178/255, blue: 178/255, alpha: 1)

【问题讨论】:

    标签: ios iphone swift uicolor


    【解决方案1】:

    便利初始化器用于颜色文字(如参数标签所说)。当您拖放颜色时,您可以在 Xcode 和 Playgrounds 中看到它。

    我看不出有任何理由自己调用颜色文字初始化程序。相反,如果您想使用 Display P3 色彩空间,您很可能会使用选项 1 或 UIColor(displayP3Red:green:blue:alpha:)

    【讨论】:

    • 这里medium.com/@gurdeep060289/…是颜色文字的演示,这里github.com/apple/swift-evolution/blob/master/proposals/…是对应的提案。
    • @MartinR 我的意思是指单位方法,但我可以看到我建议在呼叫站点使用.init( ???。 (现已编辑)
    • @DavidRönnqvist 还有一件事......调用 uicolor.init vs uicolor .. 有一些缺点吗?
    • @SudhanshuGupta 据我所知,这只是一种风格选择。在某些情况下,将初始化程序作为函数引用而不调用它很方便。除此之外,我主要看到SomeType( ... )
    • @SudhanshuGupta:没有区别,但SomeType.init(...) 允许您“跳转到定义”,即使对于没有外部参数的构造函数,比较stackoverflow.com/questions/32048978/…
    【解决方案2】:

    您可能有一个 UIColor 扩展,它正在添加 UIColor(colorLiteralRed:, green:, blue:, alpha:) 初始化方法。标准的UIKit 方法是第一种方法。也许 colorLiteralRed 只需要 178、178、178,而不是 178/255、178/255、178/255? 这是错误的

    编辑

    你是对的——我猜colorLiteralRed 是为了支持 Xcode 中新的Color Literal 语法。尝试在 Xcode 中输入这个 - let color:UIColor = Color Literal 并让自动完成弹出一个颜色选择器。如果您选择一种颜色,Xcode 中将出现一个颜色方块。但是,源代码看起来像let color = #colorLiteral(red: 1.0, green: 0, blue: 0, alpha: 1)。虽然没有记录,但我猜你引用的方法是在这里调用的。

    【讨论】:

    • 不,这是 Apple 在 UIColor 中的方法。这存在于标准 UIKit 中
    【解决方案3】:

    第一种方法

    init(colorLiteralRed:green:blue:alpha:) 旨在与由开发工具管理的颜色文字一起使用。

    第二种方法

    init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) 旨在供 iOS 应用用于创建颜色。

    两者在性能方面是相当的。我们不应该使用init(colorLiteralRed:green:blue:alpha:),因为在 Swift4 中苹果已经弃用了这个方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多