// 1. ?? operator
var a : Int?
let c : Int?
var b : Int = 123
var ss = a ?? b
print(ss)
ss = c ?? b // error : constant c is used before being initialized.
print(ss)
a = nil
ss = a ?? b
print(ss)
// 2. Working with Characters
for character in "Dog!^^".characters {
print(character)
}
let catCharacters: [Character] = ["C","a","t","!"]
let catString = String(catCharacters)
print(catString)
var tmp = catString
tmp.append("?")
print(tmp)
2020년 2월 9일 일요일
Swift ?? operator, Characters
Swift collection: array, set,dictionary
// 1. Collection : Array
var a = [Int]()
var b = Array(repeating: 4, count: 3)
print(a)
print(b)
a = [1,2,3]
var c = a + b
print(c)
c += [5,6]
print(c)
c[2...5] = [9,10] //it's brilliant way.
print(c)
for (index, val) in c.enumerated(){
print( "\(index) => \(val)" )
}
// 2. Collection : Set
var even:Set<Int> = [2,4,6,8,10]
var odd:Set = [1,3,5,7,9]
var tmp = Set<Int>()
even.insert(12)
tmp = [2,3,4,5]
print(tmp.intersection(odd))
print(tmp.union(even))
print(tmp.symmetricDifference(even).sorted())
//3. Collection : Dictionary
var dict = [Int:String]()
dict = [:]
print(dict)
var airportCode = ["a":"america", "b":"bangkok", "c":"china"]
for( key, value ) in airportCode {
print( "key:\(key) val:\(value)")
}
Swift loop, switch,fallthrough
//1. loop
for i in 0...3 {
print(i)
}
for i in (0...3).reversed(){
print(i)
}
//2. switch interval matching
let a = 32
switch a {
case 0,3:
print("0,3")
case 0...19:
print("...19")
case 20..<40:
print("20..<40")
default:
print("default")
}
// switch tuples
let a = (1, 1)
switch a {
case (0, 0):
print("(0, 0) is at the origin")
case (_, 0):
print("(\(a.0), 0) is on the x-axis")
case (0, _):
print("(0, \(a.1)) is on the y-axis")
case (-2...2, -2...2):
print("(\(a.0), \(a.1)) is inside the box")
default:
print("(\(a.0), \(a.1)) is outside of the box")
}
// switch value binding
let a = (2, 0)
switch a {
case (let x, 0):
print("on the x-axis with an x value of \(x)")
case (0, let y):
print("on the y-axis with a y value of \(y)")
case let (x, y):
print("somewhere else at (\(x), \(y))")
case (let x,0),(0, let x):
//warning: case will never be executed
print("On an axis, \(x) from the origin")
case (let x,0),(0, let y) :
//error: x,y must be bound in every pattern
print("error")
}
//switch where
let a = (101,10)
switch a {
case let(x,y) where x == y :
print("x==y")
case let(x,y) where x >= y :
print("x>=y")
case let(x,y) where x <= y :
print("x<=y")
default:
print("default")
}
// switch fallthrough
var a = 1
switch a {
case 0...4:
print("0...4")
fallthrough
case 5...10:
print("5....10")
case 11...14:
print("11...14")
default:
print("default")
}
Custom View , @IBDesignable, @IBInspectable
//BaseViewWithXib.swift
import UIKit
class BaseViewWithXib: UIView {
var contentView: UIView?
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
func setupView() {
let view = viewFromNibForClass()
view.frame = bounds
view.autoresizingMask = [
UIViewAutoresizing.flexibleWidth,
UIViewAutoresizing.flexibleHeight
]
addSubview(view)
self.contentView = view
}
private func viewFromNibForClass() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
return view
}
}
//MyView.swift
import UIKit
@IBDesignable class MyView: BaseViewWithXib {
@IBInspectable var bgColor:UIColor?{
didSet {
self.contentView?.backgroundColor = bgColor
}
}
//must be . if not, IB designable compile error occur!
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
피드 구독하기:
글 (Atom)