I'm guessing that conversion of a Swift array to an NSArray can only happen if 
the Swift array holds NSObjects. So, I tried changing the type parameter of my 
class to NSObject:

class Test<NSObject>
{
    let array = [NSObject]()

    init() {
        let temp = self.array as NSArray
    }
}

 error: cannot convert value of type '[NSObject]' to type 'NSArray' in coercion
        var temp  = self.array  as NSArray
                    ~~~~~^~~~~

However, if I change the type parameter to something else it compiles with no 
problem.

class Test<T>
{
    let array = [NSObject]()

    init() {
        let temp = self.array as NSArray
    }
}


I guess this is interesting, but I still can't create an array with items whose 
type is the type parameter of the class and then convert to NSArray.

Doug Hill


> On Jan 25, 2017, at 10:49 AM, Doug Hill <swiftus...@breaqz.com> wrote:
> 
> OK, I just tried testing this code in my app and a Swift playground. I also 
> tried a variation on the initializer just for the heck of it. I get the 
> following error:
> 
> class Test<T>
> {
>     var array:[T] = []
>     var array2 = [T]()
> 
>     init() {
>         var temp  = self.array as NSArray
>         var temp2 = self.array2 as NSArray
>     }
> }
> 
> error: cannot convert value of type '[T]' to type 'NSArray' in coercion
>                 var temp = self.array as NSArray
>                            ~~~~~^
> error: cannot convert value of type '[T]' to type 'NSArray' in coercion
>                 var temp2 = self.array2 as NSArray
>                             ~~~~~^
> 
> Are there restrictions on what can be converted to NSArray?
> 
> Doug Hill
> 
>> On Jan 25, 2017, at 9:24 AM, Doug Hill via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>> Thanks for the help. I'm still trying to figure out how Swift works, 
>> particularly what the error messages mean. This has been driving me a little 
>> nuts trying to figure out what is wrong via sometimes cryptic errors. Also, 
>> it seems like getting generic programming working in Swift is more difficult 
>> than I'm used to (even than C++!) so this answer helps figure out how the 
>> compiler works.
>> 
>> Doug Hill
>> 
>> 
>>> On Jan 23, 2017, at 7:04 PM, Zhao Xin <owe...@gmail.com 
>>> <mailto:owe...@gmail.com>> wrote:
>>> 
>>> It seems to me that you didn't initialize your `myArray` before you casted 
>>> it. That caused the problem.
>>> 
>>> Zhaoxin
>>> 
>>> On Tue, Jan 24, 2017 at 9:34 AM, Jon Shier via swift-users 
>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>>> enumerateObjects(options:using:) exists on NSArray in Swift. And I was able 
>>> to create your generic class just fine:
>>> 
>>> class Test<T> {
>>>     var array: [T] = []
>>>     
>>>     init() {
>>>         var temp = array as NSArray
>>>     }
>>> }
>>> 
> 

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

Reply via email to