Compile error with `let` in Swift switch statements -
in swift, can slice of array using range operator, this:
let list: string[] = ["first", "middle", "last"] let cdr = list[1..list.endindex] assert(cdr == ["middle", "last"]) i'm trying same thing in recursive function takes string[] parameter, not having luck:
func last(xs: string[]) -> string? {     switch xs {     case let (singleitemlist) singleitemlist.endindex == 1:         return singleitemlist[0]     case let(multiitemlist) multiitemlist.endindex > 1:         let cdr: string[] = multiitemlist[1..multiitemlist.endindex] // compilation error!         return last(cdr)     default:         return nil // empty list     } }   last(["first", "middle", "last"]) last(["last"]) last([]) the middle case statement doesn't compile. fails error:
playground execution failed: error: <repl>:14:29: error: not find overload 'subscript' accepts supplied arguments         let cdr: string[] = multiitemlist[1..multiitemlist.endindex] // compilation error!                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ am doing wrong?   type of value let somehow not string[]?
i'm trying come equivalent recursive last method 1 scala (yes, understand there easier ways last element built-in swift , scala):
def last[t](xs: list[t]): t = xs match {     case list() => throw new error("last of empty list")     case list(x) => x     case y :: ys => last(ys) } 
multiitemlist[1..multiitemlist.endindex] not array. have convert array first. change line following:
let cdr: string[] = array(multiitemlist[1..multiitemlist.endindex]) 
Comments
Post a Comment