避免连续的“如果让”声明在Swift

避免连续的“如果让”声明在Swift,第1张

概述参见英文答案 > Using multiple let-as within a if-statement in Swift                                     在Swift中,我使用if声明来检查我的对象是否不为零 if let obj = optionalObj{} 但有时候,如果允许声明,我必须面对连续 if let obj = optionalObj 参见英文答案 > Using multiple let-as within a if-statement in Swift
在Swift中,我使用if声明来检查我的对象是否不为零
if let obj = optionalObj{}

但有时候,如果允许声明,我必须面对连续

if let obj = optionalObj{    if let a = obj.a    {        if let b = a.b        {            // do stuff        }    }}

我正在寻找一种避免连续的方式,如果允许声明。

我会尝试像:

if let obj = optionalObj && if let a = obj.a && if let b = a.b{    // do stuff}

但是swift编译器不允许这样做。

任何建议?

之前我写了一些关于替代品的小文章: https://gist.github.com/pyrtsa/77978129090f6114e9fb

在其他答案中还没有提到一种方法,我喜欢,是添加一堆重载的每个功能:

func every<A,B>(a: A?,b: B?) -> (A,B)? {    switch (a,b) {        case let (.some(a),.some(b)): return .some((a,b))        default:                       return .None    }}func every<A,B,C>(a: A?,b: B?,c: C?) -> (A,C)? {    switch (a,b,c) {        case let (.some(a),.some(b),.some(c)): return .some((a,c))        default:                                 return .None    }}// and so on...

这些可以用于if语句,case表达式以及optional.map(…)链:

// 1.var foo: Foo?if let (name,phone) = every(parsedname,parsedPhone) {    foo = ...}// 2.switch every(parsedname,parsedPhone) {    case let (name,phone): foo = ...    default: foo = nil}// 3.foo = every(parsedname,parsedPhone).map{name,phone in ...}

必须为每个添加重载是模板,但只能在库中完成一次。类似地,通过使用Functor方法(即使用< ^&&>运算符),您需要以某种方式创建currIEd函数,这也导致一些样板。

总结

以上是内存溢出为你收集整理的避免连续的“如果让”声明在Swift全部内容,希望文章能够帮你解决避免连续的“如果让”声明在Swift所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1053340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存