[swift-evolution] Make integer conversion initializers failable

Félix Cloutier felixcca at yahoo.ca
Fri Feb 12 11:21:57 CST 2016

It appears that the current integer conversion initializers will either always work, possibly trap, or truncate:

> init(_: Int)
> init(_: Int8)
> init(_: Int16)
> init(_: Int32)
> init(_: Int64)
> init(_: UInt)
> init(_: UInt8)
> init(_: UInt16)
> init(_: UInt32)
> init(_: UInt64)
> init(truncatingBitPattern: Int)
> init(truncatingBitPattern: Int16)
> init(truncatingBitPattern: Int32)
> init(truncatingBitPattern: Int64)
> init(truncatingBitPattern: UInt)
> init(truncatingBitPattern: UInt16)
> init(truncatingBitPattern: UInt32)
> init(truncatingBitPattern: UInt64)

I suggest that we change trapping initializers to failable initializers. Initializers that can't fail (identity, unsigned -> bigger signed/unsigned, signed -> bigger signed) should keep a non-Optional type.

This could extend to changing SignedIntegerType's and UnsignedIntegerType's (U)IntMax to failable initializers as well.

I think I remember someone on the core team saying that someone's working on integer types at the moment. Is that right?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160212/28a9790a/attachment.html>

More information about the swift-evolution mailing list