What is the `?` is or the `:` at the equation when coding in Swift

前端 未结 3 2073
南笙
南笙 2020-11-28 00:14

I have ran into a line of code in the infamous SevenSwitch class.

Here is the line...

backgroundView.layer.cornerRadius = self.isRounded ? frame.siz         


        
相关标签:
3条回答
  • 2020-11-28 00:31

    The ? and : are ternary operators. They are just shorthand for if statements.

    An english translation of var a = b ? c : d where b is a boolean is set a equal to c if b is true, and to d if b is false.

    So, for example,

    backgroundView.layer.cornerRadius = self.isRounded ? frame.size.height * 0.4 : 2
    

    can be translated into

    if(self.isRounded){
        backgroundView.layer.cornerRadius = frame.size.height * 0.4
    }
    else{
        backgroundView.layer.cornerRadius = 2
    }
    
    0 讨论(0)
  • 2020-11-28 00:34

    That's the ternary operator

    Basically it's saying "set the corner radius of the background view to 0.4 times the frame's height if rounded, otherwise set the corner radius to 2".

    0 讨论(0)
  • 2020-11-28 00:41

    Operators can be unary, binary, or ternary:

    This is Ternary operators operate on three targets. Like C, Swift has only one ternary operator, the ternary conditional operator (a ? b : c).

    From Apple Documents Basic Operators

    Ternary Conditional Operator

    The ternary conditional operator is a special operator with three parts, which takes the form question ? answer1 : answer2. It is a shortcut for evaluating one of two expressions based on whether question is true or false. If question is true, it evaluates answer1 and returns its value; otherwise, it evaluates answer2 and returns its value.

    As per your question if isRound is true then corner radios is frame.size.height else it's 2.

    As like if condition :

    if(self.isRounded){
        backgroundView.layer.cornerRadius = frame.size.height * 0.4
    }
    else{
        backgroundView.layer.cornerRadius = 2.0
    }
    
    0 讨论(0)
提交回复
热议问题