[swift-users] EnumerateUsingObjects in Swift

Doug Hill swiftusers at breaqz.com
Fri Jan 27 13:46:02 CST 2017


Ah, thanks for the info about Swift syntax. I guess my C++ background trips me up on some of this Swift syntax.

Doug Hill

> On Jan 25, 2017, at 11:32 PM, Pierre Monod-Broca <pierremonodbroca at gmail.com> wrote:
> 
> 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 at swift.org <mailto:swift-users at 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 <owenzx at gmail.com <mailto:owenzx at 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 <swiftusers at breaqz.com <mailto:swiftusers at 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 <swiftusers at breaqz.com <mailto:swiftusers at 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 at swift.org <mailto:swift-users at 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 at gmail.com <mailto:owenzx at 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 at swift.org <mailto:swift-users at 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 at swift.org <mailto:swift-users at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170127/900bfe23/attachment.html>


More information about the swift-users mailing list