Swift Tips | 小技巧

本文介绍了Swift编程中的一些实用技巧,包括如何重写属性(override property)、创建数组精确副本、测试带有关联值的枚举相等性以及获取GMT+08:00时区格式。同时,还展示了在iOS应用中自定义UITabBar上方分割线的方法,包括在不同iOS版本上的实现。这些内容对于Swift开发者提升代码质量和UI定制能力十分有帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、override property | 重写属性

class A {
	var property = false

	private(set) var property2 = false
}

class B: A {
    override var property: Bool {
        get {
            return true
        }
        set {
            super.property = newValue
        }
    }

	override var property2: Bool {
		return true
   } 

2、make a exact duplicate copy of an array

var arr = [1, 2, 3]
var arrCopy = arr.map { $0.copy() }

3、 test equality of Swift enums with associated values

// Before Swift 4.1
enum SimpleToken: Equatable {
    case Name(String)
    case Number(Int)
}

public func ==(lhs: SimpleToken, rhs: SimpleToken) -> Bool {
    switch (lhs, rhs) {
    case let (.Name(a),   .Name(b)),
         let (.Number(a), .Number(b)):
      return a == b
    default:
      return false
    }
}

// Swift 4.1+
enum SimpleToken: Equatable {
    case Name(String)
    case Number(Int)
}

4、获取 GMT+08:00 格式的时区

let localTimeZoneFormatter = DateFormatter()
localTimeZoneFormatter.dateFormat = "ZZZZ"
return localTimeZoneFormatter.string(from: Date())

5、UITabBar 上方添加分割线

if #available(iOS 13.0, *) {
    let appearance = self.tabBar.standardAppearance.copy()
    appearance.shadowImage = .colorForTabBar(color: UIColor(rgb: 0xE2E5F0))
    tabBar.standardAppearance = appearance
} else {
    tabBar.shadowImage = .colorForTabBar(color: UIColor(rgb: 0xE2E5F0))
}

extension UIImage {
    class func colorForTabBar(color: UIColor) -> UIImage {
        let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 0.5)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()

        context!.setFillColor(color.cgColor)
        context!.fill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image!
    }
}

extension UIColor {
   convenience init(red: Int, green: Int, blue: Int) {
       assert(red >= 0 && red <= 255, "Invalid red component")
       assert(green >= 0 && green <= 255, "Invalid green component")
       assert(blue >= 0 && blue <= 255, "Invalid blue component")

       self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
   }

    convenience init(rgb: Int) {
       self.init(
           red: (rgb >> 16) & 0xFF,
           green: (rgb >> 8) & 0xFF,
           blue: rgb & 0xFF
       )
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值