Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift short syntax of execution

Tags:

swift

I am looking for the way to write short syntax.

For instance. In JS, PHP and etc.

var a = 1 ;

function Foo ()-> void {}

a && Foo() ;

if a exists, run Foo.

a and Foo itself already mean exist or not, the syntax is away better looks....

However, in Swift, the typing checking is kinda of tough.

var a = 1 ;

func Foo ()-> Foid {} ;

a && Foo();

will generate neither are Bool returning error.

a != nil && Foo() ;

this can resolve and variable condition, but what if the better bypass for the function condition? I just dont want to write something like

if( a != nil ) { Foo() } ;

Yet what is the better syntax for Not Exist?

if ( !a ) or !a //is easy and better looks...

I found not similar thing in swift...

if( a == nil ) // will throws error when its not Optional Typing.

guard var b = xxx else {} // simply for Exist and very long syntax.

Thank you for your advice!

like image 381
Micah Avatar asked Jan 29 '26 19:01

Micah


1 Answers

As mentioned by other contributors, Swift emphasizes readability and thus, explicit syntax. It would be sacrilege for the Swift standard library to support Python-style truth value testing.

That being said, Swift’s extensibility allows us to implement such functionality ourselves—if we really want to.

prefix func !<T>(value: T) -> Bool {
    switch T.self {
    case is Bool.Type:
        return value as! Bool
    default:
        guard Double(String(describing: value)) != 0
            else { return false }

        return true
    }
}

prefix func !<T>(value: T?) -> Bool {
    guard let unwrappedValue = value
        else { return false }

    return !unwrappedValue
}

var a = 1

func foo() -> Void { }

!a && !foo()

Or even define our own custom operator:

prefix operator ✋

prefix func ✋<T>(value: T) -> Bool {
    /// Same body as the previous example.
}

prefix func ✋<T>(value: T?) -> Bool {
    guard let unwrappedValue = value
        else { return false }

    return ✋unwrappedValue
}

var a = 1

func foo() -> Void { }

✋a && ✋foo()
like image 164
Chris Zielinski Avatar answered Jan 31 '26 19:01

Chris Zielinski



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!