Re: [swift-evolution] Explicity Size Clipping

2016-01-06 Thread Félix Cloutier via swift-evolution
I don't understand. Can you show a code example?

Félix

> Le 6 janv. 2016 à 13:02:43, James Campbell via swift-evolution 
>  a écrit :
> 
> I have a overloaded method for a protocol that takes an Int or double.
> 
> I have an issue with swift calling the Int version when passing in a UInt32 . 
> Ideally I would prefer the compiler to detect I am about to do something 
> which will cause an overflow and throw an error.
> 
> I would then have to explicitly add a overloaded UInt32 method or explicitly 
> convert it to Int like so "Int(uintVariable)".
> 
> -- 
>  Wizard
> ja...@supmenow.com 
> +44 7523 279 698
>  ___
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

___
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


Re: [swift-evolution] Explicity Size Clipping

2016-01-06 Thread James Campbell via swift-evolution
This is the full code:

//

//  Box.swift

//  Project

//

//  Created by James Campbell on 06/01/2016.

//

//

// This File implements the Box protocol for Type Safe Alogrithm Types and
other useful things.


import Foundation


//MARK:- Box


protocol Box: CustomStringConvertible, CustomDebugStringConvertible {



typealias FloatLiteralType = Double

typealias IntegerLiteralType = Int

typealias BoxType = Any



var value: BoxType { get set }



init()

init(_ value: BoxType)

}


extension Box where BoxType: CustomStringConvertible {



var description: String {

return self.value.description

}



var debugDescription: String {

return "\(self.value.description)"

}

}


//MARK: FloatingPointBox


protocol FloatingPointBox: Box, FloatLiteralConvertible,
IntegerLiteralConvertible {



typealias BoxType = Double

typealias FloatLiteralConvertible = Double

typealias IntegerLiteralConvertible = Int

}


extension Box where Self.BoxType == Double {



init(_ value: Double) {



self.init()

self.value = value

}



init(_ value: Int) {

self.init()

self.value = Double(value)

}



init(_ value: UInt32) {

self.init()

self.value = Double(value)

}

}


extension FloatLiteralType {



init(_ box: T) {

self.init(box.value)

}



init(_ box: T) {

self.init(box.value)

}

}


extension CGFloat {



init(_ box: T) {

self.init(box.value)

}



init(_ box: T) {

self.init(box.value)

}

}


//Adding FloatLiteralConvertible, IntegerLiteralConvertible


extension FloatingPointBox where Self.BoxType == Double,
Self.FloatLiteralConvertible
== Double {



init(floatLiteral value: Double) {

self.init(value)

}



init(integerLiteral value: Int) {

self.init(value)

}



init(_ value: T) {

self.init(value)

}

}


//

//  Angles.swift

//  Sup

//

//  Created by James Campbell on 22/12/2015.

//  Copyright © 2015 Sup. All rights reserved.

//

// This File defines representations of Degrees and Radians as Type Safe
Alogrithm Types


import Foundation


//MARK:- Degree


struct Degree: FloatingPointBox {



var value: Double = 0



init()

{

}

}


protocol DegreeConvertiable {



init(degreeLiteral value: Degree)

}


extension Degree: RadianConvertiable {



init(radianLiteral value: Radian) {

self.value = Double(value) * 180.0 / M_PI

}



init(_ value: Radian) {

self.init(radianLiteral: value)

}

}


//MARK:- Radian


struct Radian: FloatingPointBox {



var value: Double = 0



init()

{

}

}


protocol RadianConvertiable {



init(radianLiteral value: Radian)

}


extension Radian: DegreeConvertiable {



init(degreeLiteral value: Degree) {

self.value = Double(value) * M_PI / 180.0

}



init(_ value: Degree) {

self.init(degreeLiteral: value)

}

}

let someOptiona: Degreee? = nil

 let degree = someOptional ?? Degree(arc4random_uniform(360))

On Wed, Jan 6, 2016 at 6:57 PM, Félix Cloutier  wrote:

> I either don't understand or can't reproduce the issue. This code:
>
> class Box {
> let value: Int
> init(value: Int) {
> self.value = value
> }
> }
>
> let test: UInt32 = 4
> let box = Box(value: test)
>
>
> does not compile ("foo.swift:10:22: error: cannot convert value of type
> 'UInt32' to expected argument type 'Int'").
>
> Félix
>
> Le 6 janv. 2016 à 13:17:03, James Campbell  a écrit :
>
> protocol Box: CustomStringConvertible, CustomDebugStringConvertible {
>
>
> typealias FloatLiteralType = Double
>
> typealias IntegerLiteralType = Int
>
> typealias BoxType = Any
>
>
> var value: BoxType { get set }
>
>
> init()
>
> init(_ value: BoxType)
>
> }
>
> extension Box where Self.BoxType == Double {
>
>
> init(_ value: Double) {
>
>
> self.init()
>
> self.value = value
>
> }
>
>
> init(_ value: Int) {
>
> self.init()
>
> self.value = Double(value)
>
> }
>
>
> init(_ value: UInt32) {
>
> self.init()
>
> self.value = Double(value)
>
> }
>
> }
>
>
>
> Without that last method, Swift tries to give the UInt32 to the Int
> version of the method which isn't safe in my eyes and I would have expected
> a compiler error.
>
> On Wed, Jan 6, 2016 at 6:14 PM, Félix Cloutier  wrote:
>
>> I don't understand. Can you show a code example?
>>
>> Félix
>>
>> Le 6 janv. 2016 à 13:02:43, James Campbell via swift-evolution <
>> swift-evolution@swift.org> a écrit :
>>
>> I have a overloaded method for a protocol that takes an Int or double.
>>
>> I have an issue with swift calling the Int version when passing in a
>> UInt32 . Ideally I would prefer the compiler to detect I am about to do
>> something which will cause an 

Re: [swift-evolution] Explicity Size Clipping

2016-01-06 Thread James Campbell via swift-evolution
That last line, the value inside the Degree struct should be a Int created
from a UInt32

On Wed, Jan 6, 2016 at 7:08 PM, James Campbell  wrote:

> This is the full code:
>
> //
>
> //  Box.swift
>
> //  Project
>
> //
>
> //  Created by James Campbell on 06/01/2016.
>
> //
>
> //
>
> // This File implements the Box protocol for Type Safe Alogrithm Types and
> other useful things.
>
>
> import Foundation
>
>
> //MARK:- Box
>
>
> protocol Box: CustomStringConvertible, CustomDebugStringConvertible {
>
>
>
> typealias FloatLiteralType = Double
>
> typealias IntegerLiteralType = Int
>
> typealias BoxType = Any
>
>
>
> var value: BoxType { get set }
>
>
>
> init()
>
> init(_ value: BoxType)
>
> }
>
>
> extension Box where BoxType: CustomStringConvertible {
>
>
>
> var description: String {
>
> return self.value.description
>
> }
>
>
>
> var debugDescription: String {
>
> return "\(self.value.description)"
>
> }
>
> }
>
>
> //MARK: FloatingPointBox
>
>
> protocol FloatingPointBox: Box, FloatLiteralConvertible,
> IntegerLiteralConvertible {
>
>
>
> typealias BoxType = Double
>
> typealias FloatLiteralConvertible = Double
>
> typealias IntegerLiteralConvertible = Int
>
> }
>
>
> extension Box where Self.BoxType == Double {
>
>
>
> init(_ value: Double) {
>
>
>
> self.init()
>
> self.value = value
>
> }
>
>
>
> init(_ value: Int) {
>
> self.init()
>
> self.value = Double(value)
>
> }
>
>
>
> init(_ value: UInt32) {
>
> self.init()
>
> self.value = Double(value)
>
> }
>
> }
>
>
> extension FloatLiteralType {
>
>
>
> init(_ box: T) {
>
> self.init(box.value)
>
> }
>
>
>
> init(_ box: T) {
>
> self.init(box.value)
>
> }
>
> }
>
>
> extension CGFloat {
>
>
>
> init(_ box: T) {
>
> self.init(box.value)
>
> }
>
>
>
> init(_ box: T) {
>
> self.init(box.value)
>
> }
>
> }
>
>
> //Adding FloatLiteralConvertible, IntegerLiteralConvertible
>
>
> extension FloatingPointBox where Self.BoxType == Double, 
> Self.FloatLiteralConvertible
> == Double {
>
>
>
> init(floatLiteral value: Double) {
>
> self.init(value)
>
> }
>
>
>
> init(integerLiteral value: Int) {
>
> self.init(value)
>
> }
>
>
>
> init(_ value: T) {
>
> self.init(value)
>
> }
>
> }
>
>
> //
>
> //  Angles.swift
>
> //  Sup
>
> //
>
> //  Created by James Campbell on 22/12/2015.
>
> //  Copyright © 2015 Sup. All rights reserved.
>
> //
>
> // This File defines representations of Degrees and Radians as Type Safe
> Alogrithm Types
>
>
> import Foundation
>
>
> //MARK:- Degree
>
>
> struct Degree: FloatingPointBox {
>
>
>
> var value: Double = 0
>
>
>
> init()
>
> {
>
> }
>
> }
>
>
> protocol DegreeConvertiable {
>
>
>
> init(degreeLiteral value: Degree)
>
> }
>
>
> extension Degree: RadianConvertiable {
>
>
>
> init(radianLiteral value: Radian) {
>
> self.value = Double(value) * 180.0 / M_PI
>
> }
>
>
>
> init(_ value: Radian) {
>
> self.init(radianLiteral: value)
>
> }
>
> }
>
>
> //MARK:- Radian
>
>
> struct Radian: FloatingPointBox {
>
>
>
> var value: Double = 0
>
>
>
> init()
>
> {
>
> }
>
> }
>
>
> protocol RadianConvertiable {
>
>
>
> init(radianLiteral value: Radian)
>
> }
>
>
> extension Radian: DegreeConvertiable {
>
>
>
> init(degreeLiteral value: Degree) {
>
> self.value = Double(value) * M_PI / 180.0
>
> }
>
>
>
> init(_ value: Degree) {
>
> self.init(degreeLiteral: value)
>
> }
>
> }
>
> let someOptiona: Degreee? = nil
>
>  let degree = someOptional ?? Degree(arc4random_uniform(360))
>
> On Wed, Jan 6, 2016 at 6:57 PM, Félix Cloutier  wrote:
>
>> I either don't understand or can't reproduce the issue. This code:
>>
>> class Box {
>> let value: Int
>> init(value: Int) {
>> self.value = value
>> }
>> }
>>
>> let test: UInt32 = 4
>> let box = Box(value: test)
>>
>>
>> does not compile ("foo.swift:10:22: error: cannot convert value of type
>> 'UInt32' to expected argument type 'Int'").
>>
>> Félix
>>
>> Le 6 janv. 2016 à 13:17:03, James Campbell  a écrit :
>>
>> protocol Box: CustomStringConvertible, CustomDebugStringConvertible {
>>
>>
>> typealias FloatLiteralType = Double
>>
>> typealias IntegerLiteralType = Int
>>
>> typealias BoxType = Any
>>
>>
>> var value: BoxType { get set }
>>
>>
>> init()
>>
>> init(_ value: BoxType)
>>
>> }
>>
>> extension Box where Self.BoxType == Double {
>>
>>
>> init(_ value: Double) {
>>
>>
>> self.init()
>>
>> self.value = value
>>
>> }
>>
>>
>> init(_ value: Int) {
>>
>> self.init()
>>
>> self.value = Double(value)
>>
>> }
>>
>>
>> init(_ value: UInt32) {
>>
>> self.init()
>>
>> self.value = Double(value)
>>
>> }
>>
>> }

Re: [swift-evolution] Explicity Size Clipping

2016-01-06 Thread Félix Cloutier via swift-evolution
I either don't understand or can't reproduce the issue. This code:

> class Box {
>   let value: Int
>   
>   init(value: Int) {
>   self.value = value
>   }
> }
> 
> let test: UInt32 = 4
> let box = Box(value: test)

does not compile ("foo.swift:10:22: error: cannot convert value of type 
'UInt32' to expected argument type 'Int'").

Félix

> Le 6 janv. 2016 à 13:17:03, James Campbell  a écrit :
> 
> protocol Box: CustomStringConvertible, CustomDebugStringConvertible {
> 
> 
> typealias FloatLiteralType = Double
> 
> typealias IntegerLiteralType = Int
> 
> typealias BoxType = Any
> 
> 
> var value: BoxType { get set }
> 
> 
> init()
> 
> init(_ value: BoxType)
> 
> }
> 
> extension Box where Self.BoxType == Double {
> 
> 
> init(_ value: Double) {
> 
> 
> self.init()
> 
> self.value = value
> 
> }
> 
> 
> init(_ value: Int) {
> 
> self.init()
> 
> self.value = Double(value)
> 
> }
> 
> 
> init(_ value: UInt32) {
> 
> self.init()
> 
> self.value = Double(value)
> 
> }
> 
> }
> 
> 
> 
> 
> 
> Without that last method, Swift tries to give the UInt32 to the Int version 
> of the method which isn't safe in my eyes and I would have expected a 
> compiler error.
> 
> 
> On Wed, Jan 6, 2016 at 6:14 PM, Félix Cloutier  > wrote:
> I don't understand. Can you show a code example?
> 
> Félix
> 
>> Le 6 janv. 2016 à 13:02:43, James Campbell via swift-evolution 
>> > a écrit :
>> 
>> I have a overloaded method for a protocol that takes an Int or double.
>> 
>> I have an issue with swift calling the Int version when passing in a UInt32 
>> . Ideally I would prefer the compiler to detect I am about to do something 
>> which will cause an overflow and throw an error.
>> 
>> I would then have to explicitly add a overloaded UInt32 method or explicitly 
>> convert it to Int like so "Int(uintVariable)".
>> 
>> -- 
>>  Wizard
>> ja...@supmenow.com 
>> +44 7523 279 698  
>> ___
>> swift-evolution mailing list
>> swift-evolution@swift.org 
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> 
> 
> 
> 
> 
> -- 
>  Wizard
> ja...@supmenow.com 
> +44 7523 279 698

___
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution