Hi Simon,

This behavior is intentional; implicit bridging conversions are slated for 
removal in Swift 3.

More information: 
https://github.com/apple/swift-evolution/blob/master/proposals/0072-eliminate-implicit-bridging-conversions.md
 
<https://github.com/apple/swift-evolution/blob/master/proposals/0072-eliminate-implicit-bridging-conversions.md>

Best,
Austin

> On May 23, 2016, at 12:44 AM, simon gladman via swift-users 
> <[email protected]> wrote:
> 
> Hi All,
> 
> I thought I'd attempt updating the code of my Filterpedia 
> <https://github.com/FlexMonkey/Filterpedia> app to Swift 3. The transition 
> has been pretty smooth so far, but I have a few issues. I guess my question 
> over these issues is, are they features or bugs in an early Swift 3 release?
> 
> First off, overriding CIFilter requires overriding the attributes var which 
> is of type [String: AnyObject]. In Swift 2, the following works perfectly:
> 
>     override var attributes: [String : AnyObject] {
>         return [
>                    kCIAttributeFilterDisplayName: "CMYK Levels",
>                    "inputImage": [kCIAttributeIdentity: 0,
>                                   kCIAttributeClass: "CIImage",
>                                   kCIAttributeDisplayName: "Image",
>                                   kCIAttributeType: kCIAttributeTypeImage]
>         ]
>     }
> 
> However, because the inputImage dictionary entry is a dictionary itself and 
> kCIAttributeTypeImage is a string, in Swift 3, it appears I have to 
> explicitly case them to compile:
> 
>     override var attributes: [String : AnyObject] {
>         return [
>                    kCIAttributeFilterDisplayName: "CMYK Levels",
>                    "inputImage": [kCIAttributeIdentity: 0,
>                                   kCIAttributeClass: "CIImage",
>                                   kCIAttributeDisplayName: "Image",
>                                   kCIAttributeType: kCIAttributeTypeImage as 
> AnyObject] as AnyObject
>         ]
>     }
> 
> There's a similar casting issue with the arguments parameter of a kernel's 
> apply method. In Swift 2, the following compiles without issue:
> 
>         let kernel = CIColorKernel()
>         
>         let rect = CGRect(
>             x: 0, y: 0,
>             width: 100, height: 100)
>         
>         let inputRadius: CGFloat = 5.678
>         let inputCenter = CIVector(x: 12.3, y: 45.6)
>         let inputRect = CIVector(cgRect: rect)
>         let inputString = "Xyzzy"
>         
>         let arguments = [inputRect,
>                          inputRadius,
>                          inputCenter,
>                          inputString]
>         
>         kernel.apply(
>             withExtent: rect,
>             arguments: arguments)
> 
> While in 3, I need to do the following:
> 
>         let arguments = [inputRect,
>                          inputRadius as AnyObject,
>                          inputCenter,
>                          inputString as AnyObject] as [AnyObject]
> 
> Any thoughts anybody?
> 
> Cheers!
> 
> Simon
> 
> Simon Gladman     +44 7973 669691 <tel:%2B44%207973%20669691>
> 
> Blog: http://flexmonkey.blogspot.co.uk <http://flexmonkey.blogspot.co.uk/>
> GitHub: https://github.com/FlexMonkey <https://github.com/FlexMonkey>
> Twitter: @FlexMonkey <https://twitter.com/FlexMonkey>
> _______________________________________________
> swift-users mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to