美文网首页
【iOS开发】Swift便利构造函数

【iOS开发】Swift便利构造函数

作者: 文刂Rn | 来源:发表于2017-04-18 17:54 被阅读20次

扩展可以向已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。

扩展能向类中添加新的便利构造器,但是它们不能向类中添加新的指定构造器或析构函数。指定构造器和析构函数必须总是由原始的类实现来提供。

import UIKit

extension UIColor {
    
    class func randomColor() -> UIColor {
        
        return UIColor(red: CGFloat(arc4random_uniform(256))/255.0, green: CGFloat(arc4random_uniform(256))/255.0, blue: CGFloat(arc4random_uniform(256))/255.0, alpha: 1.0)
    }
    
    /// 便利构造函数
    /// 在extensino扩充构造函数,必须扩充便利构造函数
    /// 1. 必须在init前加上convenience
    /// 2. 必须调用self.init()原有的某一个构造函数
    /// - Parameters:
    ///   - r: 红
    ///   - g: 绿
    ///   - b: 蓝
    ///   - a: 透明度
    convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1.0) {
        self.init(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: a)
    }
    
    /// 便利构造函数 (十六进制转UIColor)
    /// init? 返回值可为空
    convenience init?(hexString: String) {
        
        guard hexString.characters.count >= 6 else {
            return nil
        }
        
        var hexTempString = hexString.uppercased()
        
        if hexTempString.hasPrefix("0X") || hexTempString.hasPrefix("##") {
            hexTempString = (hexTempString as NSString).substring(from: 2)
        }
        
        if hexTempString.hasPrefix("#") {
            hexTempString = (hexTempString as NSString).substring(from: 1)
        }
        
        var range = NSRange(location: 0, length: 2)
        let rHex = (hexTempString as NSString).substring(with: range)
        range.location = 2
        let gHex = (hexTempString as NSString).substring(with: range)
        range.location = 4
        let bHex = (hexTempString as NSString).substring(with: range)
        
        var r: UInt32 = 0
        var g: UInt32 = 0
        var b: UInt32 = 0
        
        Scanner(string: rHex).scanHexInt32(&r)
        Scanner(string: gHex).scanHexInt32(&g)
        Scanner(string: bHex).scanHexInt32(&b)
        
        self.init(r: CGFloat(r), g: CGFloat(g), b: CGFloat(b))
    }
    
}

相关文章

  • 【iOS开发】Swift便利构造函数

    扩展可以向已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实...

  • Swift - 便利构造函数

    对于项目中一些常用的UI控件,往往是根据需求需要写很多重复代码,这样看起来代码就会很繁琐 这个时候就需要便利构造函...

  • swift 便利构造函数

    便利构造函数 便利构造函数允许返回nil, 正常的构造函数一定会创建对象判断给定的条件是否符合条件,如果条件不符合...

  • Swift构造函数和便利构造函数

    [转]Swift构造函数和便利构造函数 构造函数基础 构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为...

  • Swift构造函数-便利构造函数(三)

    convenience 便利构造函数 默认情况下,所有的构造方法都是指定构造函数 Designated conve...

  • Swift面试题总结

    1.convenience : 便利,使用convenience修饰的构造函数叫做便利构造函数 // 便利构造函数...

  • Swift 的便利构造函数

    在Swift中可以使用便利构造函数,在对象初始化的时候加入对对象属性的约束来对对象的初始化进行操作,对于不符合属性...

  • Swift便利构造函数convenience

    便利构造函数: convenience 便利构造函数是对构造函数的一种功能扩充, 可以在初始化之前,根据指定的条件...

  • 便利构造函数

    convenience:便利,使用convenience修饰的构造函数叫做便利构造函数 便利构造函数通常用在对系统...

  • convenience 便利构造器

    convenience:便利,使用convenience修饰的构造函数叫做便利构造函数便利构造函数通常用在对系统的...

网友评论

      本文标题:【iOS开发】Swift便利构造函数

      本文链接:https://www.haomeiwen.com/subject/cdlqzttx.html