News for hackers. Stuff that matters.
Re:What’s New in Swift 5.2 by Tainnor on Thursday February 06, 2020 @02:51PM (#22259628)
there are holes in Swift's generics system, but this isn't one of them. you don't need separate extensions for int, string, float etc. arrays. the parent post gave you a generic implementation that works with any type of array
Re:What’s New in Swift 5.2 by melling on Thursday February 06, 2020 @04:21PM (#22260473)
Hmmm. I thought ArraySlice had different semantics. Why wouldn’t it be declared returning [Element]?

   extension Array {
          func take(_ n: Int) -> [Element] {
             self[0..<n]
          }
      }
Apple provides this warning for ArraySlice:

“Long-term storage of ArraySlice instances is discouraged. A slice holds a reference to the entire storage of a larger array, not just to the portion it presents, even after the original array’s lifetime ends. Long-term storage of a slice may therefore prolong the lifetime of elements that are no longer otherwise accessible, which can appear to be memory and object leakage.”

https://developer.apple.com/documentation/swift/arrayslice

Would it be acceptable to put these implementations in a Functional library?

Re:What’s New in Swift 5.2 by Someone on Thursday February 06, 2020 @05:49PM (#22261300)
Yes, it would. Returning an Array would require take to copy the data, slowing down your nice functional code.
Re:What’s New in Swift 5.2 by Tainnor on Friday February 07, 2020 @08:04PM (#22272904)
This is because Swift is quite low-level when it comes to storage etc., so [0..<n] returns an ArraySlice.

However, this has nothing to do with generics.If you're willing to sacrifice performance, you could easily write

  extension Array {
      func take(_ n: Int) -> [Element] {
          Array(self[0..<n])
      }
  }