Search code examples
iosswiftswift-playground

No output in Swift Playground


I am trying to put fibonacci number in an array and wanted to see the array output in playground console but for some reason I do not see any ouput. Can someone plz help in making me understand the mistake that I am cdoing in my program ?

import UIKit

class FibonacciSequence {

    let includesZero: Bool
    let values: [Int]

    init(maxNumber: Int, includesZero: Bool) {
        self.includesZero = includesZero
        values = [0]
        var counter: Int
        if (includesZero == true) { counter = 0 }
        else { counter = 1 }
        for counter  <= maxNumber; {
            if ( counter == 0 ) {
                values.append(0)
                counter = 1
            }
            else {
                counter = counter + counter
                values.append(counter)
            }
        }
        println(values)

    }

    println(values)
    return values
}

let fibanocciSequence = FibonacciSequence(maxNumber:123, includesZero: true)

Solution

  • @ABakerSmith has given you a good rundown of the problems in the code as-is, but you also might want to consider, instead of a class that initializes an array member variable, writing a SequenceType that returns fibonacci numbers:

    struct FibonacciSequence: SequenceType {
        let maxNumber: Int
        let includesZero: Bool
    
        func generate() -> GeneratorOf<Int> {
            var (i, j) = includesZero ? (0,1) : (1,1)
            return GeneratorOf {
                (i, j) = (j, i+j)
                return (i < self.maxNumber) ? i : nil
            }
        }
    }
    
    let seq = FibonacciSequence(maxNumber: 20, includesZero: false)
    
    // no arrays were harmed in the generation of this for loop
    for num in seq {
        println(num)
    }
    
    // if you want it in array form:
    let array = Array(seq)
    

    You could of course memoize the sequence if you want to improve performance on multiple generations.