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 <swiftusers@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 <owenzx@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
}
}