> On Aug 18, 2016, at 9:54 AM, Adel Zhang via swift-users 
> <swift-users@swift.org> wrote:
> 
> Any other situation when implicit type casting works?

I don't know if there's a comprehensive list anywhere. Here are the ones I can 
think of:

1. A subtype can be used where a supertype is expected; for instance, you can 
pass an `Int` to a parameter typed `Any` without a cast. The same is true of 
superclasses: `NSString` can be used where `NSObject` is expected. Obvious, but 
worth mentioning.

2. Swift 3's `AnyHashable` isn't *really* a supertype of `Hashable` types, but 
it's sort of treated as one.

3. The built-in `Array`, `Dictionary`, `Set`, and `Optional` types can be 
implicitly converted to the same data structure, but with supertypes of its 
generic parameters. For instance, an `Array<Int>` can be passed to a parameter 
of type `Array<Any>`. This is not a general feature of generics—it's 
special-cased for these types.

4. As you noticed, a type can be implicitly made more `Optional`; that is, 
`Int` converts to `Optional<Int>`, `Optional<Optional<Int>>`, and so on.

5. In Swift 2, importing Foundation activates many implicit conversions between 
Foundation and Standard Library types, including conversions to AnyObject. Many 
(perhaps all?) are gone in Swift 3. (However, Foundation still has plenty of 
magical `as` casts.)

Hope this helps,
-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to