0
votes

First I create some lists:

let day0 = [0] as NSArray
let day1 = [0, 8, 2, 3, 4] as NSArray
let day2 = [0, 1, 2, 3, 4] as NSArray
let day3 = [0, 1, 2, 3, 4] as NSArray
let day4 = [0, 1, 2, 3, 4] as NSArray

let month0 = [0] as NSArray
let january = [day0, day1, day2, day3, day4] as NSArray
let february = [day0, day1, day2, day3, day4] as NSArray
let march = [day0, day1, day2, day3, day4] as NSArray
let april = [day0, day1, day2, day3, day4] as NSArray
let may = [day0, day1, day2, day3, day4] as NSArray
let june = [day0, day1, day2, day3, day4] as NSArray
let july = [day0, day1, day2, day3, day4] as NSArray
let august = [day0, day1, day2, day3, day4] as NSArray
let september = [day0, day1, day2, day3, day4] as NSArray
let october = [day0, day1, day2, day3, day4] as NSArray
let november = [day0, day1, day2, day3, day4] as NSArray
let december = [day0, day1, day2, day3, day4] as NSArray

let calendar = [month0, january, february, march, april, may, june, july, august, september, october, december] as NSArray

Then I try to return an element:

@IBAction func SetVariablesButton(sender: UIButton)
{
    var result = calendar[1][1][1] as String
    BedTimeLabel.text = String(result)
}

Then I get the error. I've tried various changes such as

let day0 = [0] as! NSArray

and

let day0 = [0] as Array<T>

but those didn't work. I originally didn't cast the vars at all, but after researching the common problem, the common solution was to cast the vars so the compiler could understand what was going on. I'm using Xcode 8 with Swift 2.3

1
Please don't make is worse by casting a strong type Swift Array to type-less Foundation NSArray - vadian
I tried let day0 = [0] as Array also, but then i got a compiler error - travis
Don't cast at all. The compiler infers that [0] is [Int] - vadian
I originally had not cast it at all, which is when I originally got the error. I researched the problem, and everyone's solution was to cast - travis
Everyone is wrong :-) - vadian

1 Answers

0
votes

First of all declare the dummy month month0 as [[0]] to get the same type as the others.

Then remove all casts.

let day0 = [0]
let day1 = [0, 8, 2, 3, 4]
let day2 = [0, 1, 2, 3, 4]
let day3 = [0, 1, 2, 3, 4]
let day4 = [0, 1, 2, 3, 4]

let month0 = [[0]]
let january = [day0, day1, day2, day3, day4]
let february = [day0, day1, day2, day3, day4]
let march = [day0, day1, day2, day3, day4]
let april = [day0, day1, day2, day3, day4]
let may = [day0, day1, day2, day3, day4]
let june = [day0, day1, day2, day3, day4]
let july = [day0, day1, day2, day3, day4]
let august = [day0, day1, day2, day3, day4]
let september = [day0, day1, day2, day3, day4]
let october = [day0, day1, day2, day3, day4]
let november = [day0, day1, day2, day3, day4]
let december = [day0, day1, day2, day3, day4]

let calendar = [month0, january, february, march, april, may, june, july, august, september, october, december]

The compiler can infer that calendar is [[[Int]]].

Now you can write

var result = String(calendar[1][1][1])