2016-10-27 2 views
0

Я хочу добавить функцию ко всем классам, которые реализуют Comparable, такие как Int, Float, CGFloat. Вот мой код с ошибкой докладывал:В Swift, как продлить протокол с общим типом?

extension Comparable{ 
    func constraintBetween<T: Comparable>(a:T , b: T) -> T{ 
     if self < a { 
      return a 
     }else if self > b{ 
      return b 
     }else{ 
      return self 
     } 
    } 
} 

enter image description here Любой человек может помочь сделать это правильно? Заранее спасибо!

+0

Похожих (что вы реализуете это метод _clamp_): [Стандартный способ «зажим» число между двумя значениями в Sw ] (http://stackoverflow.com/questions/36110620/standard-way-to-clamp-a-number-between-two-values-in-swift). – dfri

+0

@dfri Хорошо. Но я искал, прежде чем я спросил. – jiangjiefs

+0

Не беспокойтесь, я даже не уверен, что это дубликат, но он должен по крайней мере быть связанным и, возможно, полезным для вас. – dfri

ответ

3

Self является дублером для типа принятия протокола:

extension Comparable { 
    func constraintBetween(a: Self, b: Self) -> Self { 
     if self < a { 
      return a 
     } else if self > b { 
      return b 
     } else { 
      return self 
     } 
    } 
} 
Смежные вопросы