## 20 Cocoa Apps Challenge Cocoa

# App 02: Guess The Number

• Data type conversion
• `if` `else`
• Random number generator
• `NSColor`

## UI Flow ## Controls, Outlets, and Actions Our Cocoa app contains three basic controls:
• Label (of type `NSTextField`)
• Text field (of type `NSTextField`)
• Button (of type `NSButton`)
Note that in Cocoa, labels are `NSTextField`, not `UILabel` The label and text field are connected as outlets while the button is connected as an action

## Algorithm The app generates a random number from 1 to 12. The app then compares the generated random number (a `UInt32`) with the number inputted into the text field (a `String`).

## Data type conversion

But before they can be compared properly, they both must have the same type. So our solution is to convert `UInt32` into a `String` so that we compare the values of both as Strings.
``````
String(randomNumber) == numField.text
``````
Note that type conversion is not the same as type casting.

## if else

The `message` label's text depends upon the result of the comparison. If random number has the same value as in the text field, then the guess was correct. Otherwise, the guess was incorrect.

## Random Number Generator

`arc4random_uniform(N)` is a random number generator in OS X. You give it an upperbound `N` and it returns random numbers between 0 and N - 1. For example, to generate random numbers between 0 and 99:
``arc4random_uniform( 100 )   // 0 … (100 - 1)``
Since our Cocoa app requires a random number between 1 and 12, we do this:
``arc4random_uniform( 12 ) + 1   // (0 … (12 - 1)) + 1``
This just adds 1 to whatever value is returned by the random generator so that the result will always be 1 more than the returned original value.

## NSColor  ## Code

``````//
//  AppDelegate.swift
//  Guess The Number
//  Created by Arthur Kho (github.com/islandjoe) on 08/16.
//
//  Copyright (c) 2016 Arthur Kho
//

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

/// Random number between 1 and 12
var randomNumber = arc4random_uniform( 12 ) + 1

@IBOutlet weak var window: NSWindow!
@IBOutlet weak var message: NSTextField!
@IBOutlet weak var numField: NSTextField!

@IBAction func guess(sender: NSButton) {

let theGuess = numField.stringValue
let correct  = String(randomNumber)

if theGuess == correct {

message.stringValue = "Correct!"
message.textColor = NSColor.greenColor()

}
else {

message.stringValue = "Wrong. Guess again."
message.textColor = NSColor.redColor()

}
}
}
``````