[swift-users] Detect if a generic type is numeric
davelist at mac.com
davelist at mac.com
Sun Oct 1 10:56:06 CDT 2017
> On Sep 21, 2017, at 3:58 PM, V T via swift-users <swift-users at swift.org> wrote:
>
> Hi there!
>
> Is there a best way to check if a given type conforms to numeric protocol (Integer or FP) at runtime?
>
> func checkNumeric<T>(_ value: T) {
> /* return true if vaiue is Integer or FP */
> /* this will not compile: */
> if value is Numeric {
>
> }
> }
>
> Best regards!
>
> VT
>
I think the way to do it is to try casting as the type, but you can't use "as? Numeric" as you get:
error: protocol 'Numeric' can only be used as a generic constraint because it has Self or associated type requirements
but you could check for each specific numeric type such as:
func checkNumeric<T>(_ value: T) {
if (value as? Int != nil) || (value as? Float != nil) {
print("numeric")
} else {
print("not numeric")
}
}
checkNumeric(3)
checkNumeric(3.0)
checkNumeric("3")
HTH,
Dave
More information about the swift-users
mailing list