Search code examples
iosswiftstringinitializationtype-systems

String initializer for optional primitive types: Int? Double? Float? etc


Is it possible to have an extension for all of the above types without specifying each type individually?

For example, here is such extension for Double:

extension String {
  init?(_ value: Double?) {
    if let nonOpt = value {
      self.init(nonOpt)
    } else {
      return nil
    }
  }
}


let nonOpt: Double = 1

let opt: Double? = 1

let string = String(opt)

print(string)

I'd like to allow string initialization with optional type if it is possible to initialize string with the original type.


Solution

  • Do you mean something like this

    extension String {
        init?<T : CustomStringConvertible>(_ value : T?) {
            guard let value = value else { return nil }
            self.init(describing: value)
        }
    }
    

    or

    extension String {
        init?<T : LosslessStringConvertible>(_ value : T?) {
            guard let value = value else { return nil }
            self.init(value)
        }
    }