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 <[email protected]> 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
>> <[email protected] <mailto:[email protected]>> 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 <[email protected]
>>> <mailto:[email protected]>> 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
>>> <[email protected] <mailto:[email protected]>> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users