代码之家  ›  专栏  ›  技术社区  ›  swiftPunk Alexander

在可选/非可选情况下,如何对类型使用相同的逻辑

  •  0
  • swiftPunk Alexander  · 技术社区  · 4 年前

    我有一个闭包,它将零添加到条件中数字的左边部分,并返回字符串。数字类型为Int,但如果该类型为可选Int,则必须有效。

    停止以我的代码适用的方式重复我的代码 Int Int?

    extension Int {
        var addLeftZero: String { addLeftZeroClosure(self) }
    }
    
    
    extension Optional where Wrapped == Int {
        var addLeftZero: String {
    
            if let unwrappedValue: Wrapped = self { return addLeftZeroClosure(unwrappedValue) }
            else { return "00" }
            
        }
    }
    
    
    
    let addLeftZeroClosure: (Int) -> String = { value in
    
        if (value >= 10) { return String(describing: value) }
        else { return "0" + String(describing: value) }
        
    }
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   George    4 年前

    你可以这样做:

    extension Int {
        var addLeftZero: String {
            String(format: "%02d", self)
        }
    }
    
    extension Optional where Wrapped == Int {
        var addLeftZero: String {
            self?.addLeftZero ?? "00"
        }
    }
    

    let a: Int = 1
    let b: Int? = 2
    let c: Int? = nil
    
    print(a.addLeftZero) // Prints: 01
    print(b.addLeftZero) // Prints: 02
    print(c.addLeftZero) // Prints: 00
    

    虽然Xcode代码完成将自动完成 a?.addLeftZero a.addLeftZero .