2016-10-17 7 views
0

Я не уверен, что это возможно или нет, но я думаю Я видел это раньше.Свойства и методы доступа <T> от swift generic

Я выполняю некоторую проверку на объектах формы во всем приложении, и я хочу, чтобы это было сделано в качестве центрального, многоразового использования. Я придумал следующее:

class RGOValidatedObject<T> { 
    var validationPredicate: ((RGOValidatedObject<T>) -> Bool)? 

    var isValid: Bool { 
     return true 
    } 
} 

Я хочу, чтобы иметь возможность получить доступ к свойствам и методам T, как если бы я был подклассов непосредственно, а не добавлять свойство RGOValidatedObject возвращать значение T. Рассмотрим следующий пример:

RGOValidatedObject<String>().substringToIndex(1) 

Это то, что я имею в виду свойства и методы доступа T, на RGOValidatedObject, почти как если бы я только подклассы Т.

возможно ли это? Если да, то как мне это сделать? Я новичок в концепции дженериков Swift, но, как и внешний вид.

+1

Какой результат вы ожидаете от этой строки 'RGOValidatedObject () .substringToIndex (1)'? –

+0

Я бы ожидал, что значение индекса массива вне диапазона, но это не так. Это скорее случай, если компилятор распознает метод 'String' из' RGOValidatedObject'? –

+0

Похоже, вам нужно добавить свойство владельца стоимости типа 'T' в порядок. Вы получите нечто очень похожее на 'Необязательный ' структура перечисления. Вероятно, знание о том, как пересылка реализации типа «Необязательный» может помочь вам в решении вашей проблемы. Вы можете попытаться исследовать его, скопив быстрый исходный код –

ответ

1

Нет, нет синтаксиса «подъема», который бы продвигал методы таким образом (хотя в будущем было несколько обсуждений подобных функций). Для этого вам необходимо добавить свойство let value: T.

Несколько более распространенная версия этой проблемы заключается в создании Observable<T>. Вы не можете сделать это полностью прозрачным в Swift, чтобы вы могли просто называть методы T (в том виде, в котором вы можете справиться с магией KVO). Он должен быть явным.

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^