Last active
August 29, 2015 14:04
-
-
Save regnerjr/c2c2c40d15432e2efae6 to your computer and use it in GitHub Desktop.
iOS Programming: Chapter 2 in Swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// BNRItem.swift | |
// Created by John Regner on 7/28/14. | |
// | |
import Foundation | |
extension Array { | |
func randomItem() -> T { | |
let random = Int(arc4random()) % self.count | |
return self[random] | |
} | |
} | |
class BNRItem : NSObject{ | |
var itemName: String | |
var serialNumber: String | |
var valueInDollars: Int | |
var dateCreated: NSDate | |
override var description: String{ | |
get{ | |
return "\(itemName) (\(serialNumber)): Worth $\(valueInDollars), recorded on \(dateCreated)" | |
} | |
} | |
init(WithItemName name: String, valueInDollars: Int, serialNumber: String ){ | |
self.itemName = name | |
self.valueInDollars = valueInDollars | |
self.serialNumber = serialNumber | |
self.dateCreated = NSDate.date() | |
super.init() | |
} | |
convenience init(WithItemName name: String, serialNumber: String){ | |
self.init(WithItemName: name, valueInDollars: 0, serialNumber: serialNumber) | |
} | |
class func randomItem () -> BNRItem { | |
let randomAdjectiveList = ["Fluffy", "Rusty", "Shiny"] | |
let randomNounList = ["Bear", "Spork", "Mac"] | |
let adjectiveIndex = randomNumberLessThan(randomAdjectiveList.count) | |
let nounIndex = randomNumberLessThan(randomNounList.count) | |
let randomName = randomAdjectiveList[adjectiveIndex] + randomNounList[nounIndex] | |
let randomValue = randomNumberLessThan(100) | |
let numbers = arrayOfZeroThroughNine() | |
let chars = arrayOfAThroughZ() | |
let randomSerialNumber = | |
"\(numbers.randomItem())\(chars.randomItem())\(numbers.randomItem())\(chars.randomItem())\(numbers.randomItem())" | |
return BNRItem(WithItemName: randomName, valueInDollars: randomValue, serialNumber: randomSerialNumber) | |
} | |
} | |
func arrayOfZeroThroughNine() -> [String] { | |
retrun Array(0...9).map{ String($0) } | |
} | |
func arrayOfAThroughZ() -> [String] { | |
//ascii 'a' is code point 0x61 => 97, 'z' is 0x7A | |
return chars = Array(0x61...0x7A).map { String(UnicodeScalar($0)) } | |
} | |
class BNRContainer : BNRItem { | |
//properly written can contain instances of BNRContainer | |
var subItems = [BNRItem]() | |
var collectionValue: Int { //calculated property must be declared as var | |
var sum: Int = 0 | |
for item in subItems { | |
if let container = item as? BNRContainer { | |
sum += container.collectionValue | |
sum += container.valueInDollars | |
} | |
else { //else item is just a BNRItem | |
sum += item.valueInDollars | |
} | |
} | |
return sum | |
} | |
init(WithContainerName name: String){ | |
super.init(WithItemName: name, valueInDollars: 0, serialNumber: "") | |
} | |
func addItem(item:BNRItem) -> (){ | |
subItems += item | |
} | |
func description() -> String { | |
//returns the container name and value in dollars, and list of items | |
var items: String = "" | |
for item in subItems { | |
items += item.itemName | |
items += " " | |
} | |
return "Container: \(itemName)\nValue: \(collectionValue)\nWith Items: \(items)" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment