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 
> <mailto: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 
>> <mailto: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