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