检查值是Int,NSNumber还是String

时间:2018-07-19 02:28:57

标签: swift string generics int

我试图理解泛型,因此我创建了一个泛型以返回[NSPredicate],但是现在我需要将它们做成两个,因此每当传递数字时,它将使用正确的函数。我应该如何更改它以便将其限制为仅一个功能?

基本上,我只需要传递StringIntNSNumber(以及RawRepresentable,但我认为我不能将它们加在一起)< / p>

func createPredicate<T: CVarArg>(value: T) -> [NSPredicate] {
    return [NSPredicate(format: "someProperty == %@", value)]
}

func createPredicate(value: Int) -> [NSPredicate] {
    return [NSPredicate(format: "someProperty == %@", value as NSNumber)]
}

经过一番尝试,我得到了:

func createPredicate<T: CVarArg>(value: T) -> [NSPredicate] {
    guard let number = value as? NSNumber else { return [NSPredicate(format: "someProperty == %@", value)] }

    return [NSPredicate(format: "someProperty == %@", number)]
}

func createPredicate<T: RawRepresentable>(value: T) -> [NSPredicate] where T.RawValue: CVarArg {
    return createPredicate(value: value.rawValue)
}

是否可以使其更紧凑/更短?

0 个答案:

没有答案