swift - Function with generic type -


i have function can calculate sum of numbers in array condition so:

func sumofarraywithcondition(array: [int], filter: (element: int) -> bool) -> int {     var result = 0     in 0..<array.count filter(element: array[i]) {         result += array[i]      }     return result  } 

now want work int, float, double type. have tried, didn't work.

protocol addable {     func +(lhs: self, rhs: self) -> self }  extension int: addable {} extension double: addable {} extension float: addable {}  func sumofarraywithcondition<t: addable>(array: [t], filter: (element: t) -> bool) -> t {     var result = 0     in 0..<array.count filter(element: array[i]) {         result += array[i] // <-------- error here     }     return result // <-------- error here } 

but says:

binary operator '+=' cannot applied operands of type 'int' , 't'

so how it.

any helps appreciated. thanks.

first issue compiler inferring type int var result because don't declare type , initialize 0. need result of type t.

first, in order initialize result instance of type t value 0, need specify addable integerliteralconvertible, true int, double , float. can declare result type t , go there.

as rob pointed out, need add += function protocol if want able use it.

so final code achieves looking is:

protocol addable : integerliteralconvertible {     func +(lhs: self, rhs: self) -> self     func +=(inout lhs: self, rhs: self) }  extension int: addable {} extension double: addable {} extension float: addable {}  func sumofarraywithcondition<t: addable>(array: [t], filter: (element: t) -> bool) -> t {     var result:t = 0     in 0..<array.count filter(element: array[i]) {         result += array[i]     }     return result } 

Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo