You may want to checkout this thread–(Why does String's "init<T>(_ value: T) where T : LosslessStringConvertible" use a generic constraint?)