You should try:
```
class Test<T: NSObject> {
    let array: [T] = []
    . . .
```

Because when you declare `class Test<NSObject>`, NSObject is the generic 
parameter, no longer the class.

Pierre

> Le 26 janv. 2017 à 02:45, Doug Hill via swift-users <swift-users@swift.org> a 
> écrit :
> 
> Unfortunately, this is for a work-related project, not just research, so I'm 
> looking for solutions to specific problems that I'll need for my work.
> 
> I guess I'll have to file this one away as broken in Swift 2.x
> 
> Doug
> 
>> On Jan 25, 2017, at 5:28 PM, Zhao Xin <owe...@gmail.com> wrote:
>> 
>> I think in swift 2.x, the `Array` is not mature enough to do a lot of 
>> things. Besides, `NSArray` can also hold non-NSObjects like Int, for 
>> example. 
>> 
>> I suggest you to use the latest Swift to do your research. As in Swift, 
>> everything moves fast and changes a lot. In the latest Xcode beta, all swift 
>> 2.x are abandoned. The latest stable swift is 3.0.2 and 2.3. The next 
>> release will be swift 3.1.
>> 
>> Zhaoxin
>> 
>>> On Thu, Jan 26, 2017 at 9:17 AM, Doug Hill <swiftus...@breaqz.com> wrote:
>>> 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> 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> 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> 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
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to