Tag Archives: ios

Brief Introduction to SWIFT types

Playground located at:  https://github.com/ToniNichev/Swift-Data-Types

  • Arrays

Arrays store data of the same type in the same order (sorted)
– line 1 demonstrates creating an array syntax.
– line 7 shows the shorthand array creation syntax
– line 13 shows creating an array with Array literal (and default values)

// create empty array
var myArrayOne = Array<String>()
myArrayOne.append("Test Value")
print("Array one value: \(myArrayOne[0])")

// or using shorter syntax
var myArrayTwo = [Int]()
myArrayTwo.append(1)
myArrayTwo.append(2)
print("Array one value: \(myArrayTwo[1])")

// or with default values using array literal
var myArrayThree = ["one", "two", "three"]
print("Array one value: \(myArrayThree[1])")

// or
var myArrayFour = Array(repeating: 5, count: 3)
print("Array count: \(myArrayThree.count)")

//iterating over an array
for item in myArrayTwo {
print(item)
}

result:

Array one value: Test Value
Array one value: 2
Array one value: two
Array count: 3
1
2

Although arrays can only store elements of the same type, it is still possible to store elements from different types by creating array of Any type.
In the example below, an array of Any type is created, and populated with string, integer, double values and even another array. Then while iterating through the array elements we convert all values to string representation (line 9), and print them.

var mixedArray = Array&lt;Any&gt;()
mixedArray.append("This is string") // adding string
mixedArray.append(123) // adding integer
mixedArray.append(2.64) // double value
mixedArray.append(myArrayTwo) // adding another array

print("Printing values of mixed array, converted to strings")
for item in mixedArray {
let val: String = String(describing: item)
print("\(val)")
}

 

 

var mixedArray = Array<Any>()
mixedArray.append("This is string") // adding string
mixedArray.append(123) // adding integer
mixedArray.append(2.64) // double value
mixedArray.append(myArrayTwo) // adding another array

print("Printing values of mixed array, converted to strings")
for item in mixedArray {
let val: String = String(describing: item)
print("\(val)")
}

result:

Printing values of mixed array, converted to strings
This is string
123
2.64
[1, 2]
  • Sets

Sets unlike arrays could only store unique values in unsorted order


// create empty set
var mySetOne = Set<String>()
mySetOne.insert("one")
mySetOne.insert("two")
mySetOne.insert("three")
print("mySetOne does contain'two' : \(mySetOne.contains("two")) ")

// iterating
for item in mySetOne {
print("mySetOne: \(item)")
}

// we could create sets using Array literal too
var mySetTwo: Set&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt; = ["One", "two"]

result:

mySetOne does contain'two' : true 
mySetOne: one
mySetOne: three
mySetOne: two
  • Dictionaries

    Dictionaries are pretty much like arrays, but they store values against keys

// dictionary with integer values
var myDict = [String: Int]()
myDict["one"] = 1
myDict["two"] = 2
print("myDict value at positon 'one': \(myDict["one"]!)\n")

// dictionary with different types of objects
var obj = [String: AnyObject]()
obj["one"] = "12345" as AnyObject?

// velue two, contains second dictionary
obj["two"] = ["user": ["name": "Jim", "email": "jim@yahoo.com"] ] as AnyObject?
obj["three"] = "1221" as AnyObject?

// value 'four' is Integer
obj["four"] = 25 as AnyObject

//getting second dictionary inside value 'two'
var subDict = obj["two"]! as! [String: AnyObject]
print("\n'subDict' value: \(subDict)")

// retreiving specific value
var subDict_user_name = ((obj["two"]! as! [String: AnyObject])["user"] as! [String: AnyObject])["email"] as! String
print("\n'subDict_user_name' value: \(subDict_user_name)")

result:

myDict value at positon 'one': 1


'subDict' value: ["user": {
 email = "jim@yahoo.com";
 name = Jim;
}]

'subDict_user_name' value: jim@yahoo.com
  • Enumerations

Swift enumerations are common set of related cases

enum Locations {
case Bulgaria, USA, Australia

var address: String {
switch self {
case .Bulgaria:
return "Ohrid 3 b"
case .USA:
return "5711 Jefferson st"
case .Australia:
return "New zeland drive"
default:
return "No selection!"
}
}

var city: String {
switch self {
case .Bulgaria:
return "Velico Tarnovo"
case .USA:
return "West New Tork"
case .Australia:
return "Sidney"
default:
return "No selection!"
}
}
}

let country = Locations.USA
print("COUNTRY: \(country) \nAddress: \(country.address) \nCity:\(country.city)")

result:

COUNTRY: USA 
Address: 5711 Jefferson st 
City:West New Tork

 

  • Closures


let s = double(2, 2)

testFunc(ParamA: 2, closureA: { (paramB) in
print(">>>\(paramB)")
}) {
print("Closure 2")
}
}
// a closure that has no parameters and return a String
var hello: () -> (String) = {
return "Hello!"
}

// a closure that take two parameters and return an Int
var double: (Int, Int) -> (Int) = { x, y in
return y * x
}
func testFunc(ParamA:Int, closureA:(_ paramB:Int)->(), closureB:()->()) {
let result = 2 * ParamA
closureA(result)
closureB()
}

 

 

Playground located at:  https://github.com/ToniNichev/Swift-Data-Types