Online Swift Playground
//Generics
func add<T: AdditiveArithmetic>(a: T, b: T) -> T {
return a + b
}
let sum = add(a: 5, b: 5)
print("5 + 5 = \(sum)")
class Point<T>{
var x:T
var y:T
init(x:T, y:T){
self.x = x
self.y = y
}
}
let p1 = Point<Int>(x: 1, y: 2)
let p2: Point<Float> = Point(x: 1.0, y: 2.0)
let p3 = Point(x: 1.0, y: 2.0)
print(p3)
//Constraints
protocol Shape{
func area() -> Double
}
class Rect: Shape{
var w: Double
var h: Double
init(w:Double, h: Double){
self.w = w
self.h = h
}
func area() -> Double {
w * h
}
}
class Figures<T: Shape>{
var figures: [T]
init(figures: [T]){
self.figures = figures
}
}
extension Array where Element: Rect {
func area(){
forEach { print("area: \($0.area())")}
}
}
let arr1 = [Rect(w:1, h:1), Rect(w:2, h:2)]
let fig1 = Figures(figures: arr1)
fig1.figures.area()
//associatedtype
protocol Drawable {
associatedtype Sprite where Sprite: Rect
func draw(sprite: Sprite)
}
//conditional
protocol Updatable{
func update()
}
extension Int: Updatable{
func update(){
print("update")
}
}
extension Array: Updatable where Element: Updatable {
func update(){
forEach { $0.update()}
}
}
let arr2 = [1, 2, 3]
1.update()
arr2[0].update()
arr2.update() //x3
//Array
let arr0 = [1, 2, 3] //inference
let arr3: [Int] = [1, 2, 3] //sugar
let arr4 = [Int]() //sugar
let arr5: Array<Int> = [1, 2, 3] //generic
let arr6 = Array<Int>() //generic
//Dictionaries
let dic0 = [1 : "Mike", 2 : "Tom"] //inference
let dic1: [Int : String] = [1 : "Mike", 2 : "Tom"] //sugar
let dic2: [Int : String] = [ : ] //sugar
let dic3: Dictionary<Int, String> = [1 : "Mike", 2 : "Tom"] //generic
//Optionals
enum Optional<T> {
case some(T)
case none
}
var op1: Optional<Int> = Optional.some(5)
var op2 = Optional<Int>.some(5)
var op3 = Optional.some(5)
//if op3 == Optional<Int>.none{print("nil")}
var op4: Int? = 5
if op4 == nil {print("nil")}
Комментариев нет:
Отправить комментарий