2016-10-27 12 views
0

У меня есть функция, которая принимает значение, которое затем отправляю в NSUserDefaults для хранения в его списке свойств.Как фильтровать или иметь несколько параметров для общей функции?

func store<T>(value: T, key: String) -> Bool { 
    // send key, value to NSUserDefaults 
} 

Как настроить общие ограничения, чтобы значение могло быть только одним из возможных типов, принятых для списка свойств?

Я думал, что-то вроде:

func store<T>(value: T, key: String) -> Bool where T:NSString OR T:NSData OR T:Etc{ 
    // send key, value to NSUserDefaults 
} 

, который, конечно, не работает.

+0

Предполагая, что ваше возвращение Bool указывает успех/провал, вы не могли бы просто использовать сторожевую/другое заявление для проверки тип? – dfd

+0

Мне нужна ошибка компилятора, если функция используется с неправильным типом – Steals

ответ

1

Вы можете создать собственный протокол для всех типов, которые вы хотите, чтобы упорствовать:

protocol CustomProtocol {} 

extension NSString: CustomProtocol {} 
extension NSData: CustomProtocol {} 
// etc. 


func store<T>(value: T, key: String) -> Bool where T: CustomProtocol { 
    // send key, value to NSUserDefaults 
}