Вот мой случай:Расширение протокола соответствия для некоторых UIControls
Я хочу 2 или более UIControls, чтобы соответствовать общему протоколу: Например UISlider
, UIStepper
, MyCustomControl
. Это то, что у них есть:
class UIStepper {
var value: Float
}
class UISlider {
var value: Double
}
class MyCustomControl {
var value: Int
}
Теперь, я хотел бы что-то похожее на протокол, как что:
protocol Valuable {
associatedtype T
var value: T
}
, а затем быть в состоянии использовать [Valuable]
. Но я, конечно, попасть в знаменитую проблему похлопывает
протокола Ценные может быть использован только в качестве общего ограничения, поскольку он имеет Атман или связанные требования типа
Я видел методу type erasure и вещей аналогично онлайн. Но я чувствую, что это бесполезно для того, что я пытаюсь сделать. Я хочу иметь только массив элементов управления, обладающих свойством value, и это свойство может быть только примитивных типов. Конечно, я могу пойти и создать несколько массивов, например [IntValuable]
, [DoubleValuable]
, [FloatValuable]
, чтобы обойти его. Или, может быть, каким-то образом использовать NSNumber. или перечисление со связанными значениями. Или, может быть, есть что-то, чего я не вижу, и, следовательно, почему я размещаю здесь :) Небольшое руководство действительно оценено! Благодарю.
Возможный дубликат [Как использовать общий протокол как тип переменной] (http://stackoverflow.com/questions/27725803/how-to-use-generic-protocol-as-a-variable-type) –
@ MarcoSantarossa Да, я упомянул, что я читал о стирании стилей и тому подобное. Мне любопытно, есть ли другой способ справиться с этим, применительно к моим конкретным потребностям _simpler_. –
Более простое решение будет зависеть от того, как вы планируете использовать свойство value для объектов в вашем [Ценное] массиве. Если он имеет тип, зависящий от класса, компилятор может не позволить вам многое сделать с помощью свойства value ваших элементов массива, если вы не выполняете много типов кастинга. Если вы в порядке с типом casting при использовании, вы можете также определить свойство value как Any. –