Hi Justin, IIRC, there were several discussions about this, all of them ending up at a dead point. The question was, what would be the behavior of
foo(argA: methodA(), argB: methodB()) where methodA returns an optional. If that evaluates to nil, would methodB get evaluated as well? Or should it shortcircuit? > On Aug 15, 2016, at 9:02 AM, Justin Jia via swift-evolution > <swift-evolution@swift.org> wrote: > > Hi! > > I don’t know if this has came up before. I tried to search though the mailing > list but didn’t find any related threads. > > This is purely a syntactic thing (which I know it’s the lowest priority for > Swift 4), but I think it’s an important one. > > Let’s say we have a struct with a function: > > ``` > struct Foo { > func bar(x: Int) > } > ``` > > We can use optionals: > > ``` > let foo: Foo? = nil > let x = 1 > foo!.bar(x: x) // Able to compile, but will cause runtime error > foo?.bar(x: x) // Able to compile, and won't cause runtime error > ``` > > However: > > ``` > let foo = Foo() > let x: Int? = nil > foo.bar(x: x!) // Able to compile, but will cause runtime error > foo.bar(x: x?) // Won't compile > ``` > > I propose that we should allow `foo.bar(x: x?)`, which should be equivalent > to: > > ``` > if let x = x { > foo.bar(x: x) > } > ``` > > What do you think? > > Thanks, > Justin > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution