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 <ja...@supmenow.com> 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<T: Box where T.BoxType == Double >(_ box: T) { > > self.init(box.value) > > } > > > > init<T: Box where T.BoxType == Int >(_ box: T) { > > self.init(box.value) > > } > > } > > > extension CGFloat { > > > > init<T: Box where T.BoxType == Double >(_ box: T) { > > self.init(box.value) > > } > > > > init<T: Box where T.BoxType == Int >(_ 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<T: IntegerType>(_ 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 <felix...@yahoo.ca> 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 <ja...@supmenow.com> 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 <felix...@yahoo.ca> 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 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 >> >> >> > > > -- > Wizard > ja...@supmenow.com > +44 7523 279 698 > -- Wizard ja...@supmenow.com +44 7523 279 698
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution