shellhue
shellhue

Reputation: 569

binary operator cannot be applied to operands

Recently, i am reading "functional programming in swift". In the book, the author does some extension of Int to meet a protocol Smaller. In order to get a thorough understanding of the author's idea, i copy the code to my own playground, but it reports error.

protocol Smaller {
    static func smaller() -> Self?
}

extension Int: Smaller {
    static func smaller() -> Int? {
      //reporting error: Binary operator "==" cann't be applied to type of Int.type and Int  
      return self == 0 ? nil : self / 2
    }
}

it seems that self == 0 is not allowed in the extension. Does anybody have an idea of the reason.

Upvotes: 4

Views: 111

Answers (1)

Marco Pappalardo
Marco Pappalardo

Reputation: 955

I don't think you wanted to use a static function as you need a instantiated integer to work on and check if it is smaller.

So there are 2 approaches:

  • Remove the static from the function and then call it normally: let aInt = 4 aInt.smaller() //will be 2

  • or you change the signature of the static function to accept the instance as an argument

`

protocol Smaller {
  static func smaller(selfToMakeSmall: Self) -> Self?
}

extension Int: Smaller {
  static func smaller(selfToMakeSmall: Int) -> Int? {
    //reporting error: Binary operator "==" cann't be applied to type of Int.type and Int
    return selfToMakeSmall == 0 ? nil : selfToMakeSmall / 2
  }
}


let theInt = 4
Int.smaller(theInt)

`

but I think this could be also improved with Generics

Upvotes: 1

Related Questions