首页 > 解决方案 > 如何使闭包更短?

问题描述

如何使闭包更短?我想知道闭包的简单编程。

let closures = { (fillBefore: Bool, fillAfter: Bool) -> String in

    if fillBefore && fillAfter {
        return kCAFillModeBoth
    } else if !fillBefore && fillAfter {
        return kCAFillModeBackwards
    } else if fillBefore && !fillAfter {
        return kCAFillModeForwards
    } else {
        return kCAFillModeRemoved
    }

}

anim?.fillMode = closures((item?.fillBefore)!, (item?.fillAfter)!)

如何让闭包更短?</p>

标签: swiftclosures

解决方案


根据您的情况,我认为在某些时候您必须评估两个布尔值,所以我认为没有“更短”的代码来处理它。

但是,您可能正在寻找一种“更整洁”的方法,所以我建议将它们评估为对布尔值(元组),并switch声明:

let closure = { (fillBefore: Bool, fillAfter: Bool) -> String in
    switch (fillBefore, fillAfter) {
    case (true, true):
        return kCAFillModeBoth
    case (false, true):
        return kCAFillModeBackwards
    case (true, false):
        return kCAFillModeForwards
    default: // on your case, it would be the same as (false, false)
        return kCAFillModeRemoved
    }
}

let myClosure = closure(false,false)
myClosure // removed

推荐阅读