> On Jun 19, 2014, at 2:23 AM, Roland King <[email protected]> wrote:
> 
> I'm overriding supportedInterfaceOrientations in my view controller because I 
> want it to return Portrait + PortraitUpsideDown, and on iPhone 
> PortraitUpsideDown is not included in the standard return. 
> 
> The Objective-C method would look something like this
> 
> -(NSUInteger)supportedInterfaceOrientations
> {
>       return UIInterfaceOrientationMaskPortrait | 
> UIInterfaceOrientationMaskPortraitUpsideDown;
> }
> 
> Swift has stubbed out the method thus
> 
> override func supportedInterfaceOrientations() -> Int
> {
> }
> 
> which makes some sense. I'm tripping over myself trying however to return the 
> correct Int without casting my casts to casts of casts.

Please file a bug report. -supportedInterfaceOrientations should be declared to 
return UIInterfaceOrientationMask, not Int. This sort of loose typing works in 
C but not in Swift.


> UIInterfaceOrientationMask is a struct with a number of Type properties, so 
> you can write
> 
>       UIInterfaceOrientationMask.Portrait
> 
> to get its value however that's a struct so you need to ask for the 'value' 
> property, which is defined to return a UInt and seems to do the same as 
> toRaw(). Trying to return UIInterfaceOrientationMask.Portrait.value however 
> gives the error
> 
>       'NSNumber is not a subtype of Int'
> 
> Odd as I thought UInt was a basic type like Int, but clearly it's an NSNumber.

UInt is just as basic as Int and is unrelated to NSNumber. The error message is 
incorrect (it's a known bug). I think the problem was that .value returns UInt 
and your method returns Int.


> A bit of luck with autocompletion threw up the asSigned() method, which seems 
> to do the same as constructing an Int using Int( .. )
> 
> That appears to work but the final line is now
> 
> return UIInterfaceOrientationMask.Portrait.value.asSigned() + 
> UIInterfaceOrientationMask.PortraitUpsideDown.value.asSigned()
> 
> Surely there's something a little less unwieldy, anyone have something? Or is 
> this just a case where Swift's strong typing meets Cocoa's C background and 
> ends up in knots? 
> 
> Roland
> 
> PS in the course of trying things out I tried various ways of initializing a 
> UInt and failed dismally often with evil stack traces in the console.
> 
> var a : Int  = 123
> var b : UInt = 123                    // fail
> var c : UInt = a                      // fail
> var d : UInt = UInt( a )              // fail

The last should work assuming `a` is not negative. 


-- 
Greg Parker     [email protected]     Runtime Wrangler



_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to