RemoveGestureRecognizer – SWIFT 3

Sunt într-o situație destul de inedită în care pe un subview – fullScreenConnectView –  am definit în viewDidLoad un TapGestureRecognizer pe care l-am atașat subview-ului.

        let gestureClickFullScreen = UITapGestureRecognizer(target: self, action:  #selector(self.connectClickFullScreen(_:)))

        self.fullScreenConnectView.addGestureRecognizer(gestureClickFullScreen)

Totul e bun și frumos însă trebuie la un moment dat sa elimin acest GestureRecognizer pe care l-am adaugat în viewDidLoad. Nu mai am de-a face cu instanța de UITapGestureRecognizer, aceasta existând doar în viewDidLoad. Poate o soluție pentru eliminarea TapGestureRecognizer este să-l declarat global. Însă am căutat o cale prin care să elimin acest TapGestureRecognizer fără să am acea instanță ținută inutil pe tot parcursul aplicației.

O soluție la îndemână pentru această problemă este: 

        self.fullScreenConnectView.gestureRecognizers?.forEach(self.fullScreenConnectView.removeGestureRecognizer)

Acest lucru este posibil deoarece agregatorul UIView.gestureRecognizers este în IOS 10 un vector, deci numai bun de parcurs și eliminat din el tot ce este în plus. 

    public var gestureRecognizers: [UIGestureRecognizer]?

Pe baza acestei ultime observații putem scrie un cod mai puțin swifty sub forma:

for recognizer in subview.gestureRecognizers ?? [ ] {
subview.removeGestureRecognizer(recognizer)
}

Share Button

Swift 4 – Intro in Vision Framework

Daca ar fi sa fac un overview a saptamanii care tocmai a trecut, pot spune doar ca am avut ocazia sa lucrez cu o jucarie foarte draguta marca Apple.

Cum deja au trecut doua luni de la WWDC, era si cazul sa pun mana sa invat CoreML si Vision, framework-uri de machine learning. Continue reading

Share Button

Swift 3 – JSON – extragere informatii dintr-un fisier si transformare in Data

Avem urmatorul scenariu. Un fisier local ServerData.json care serveste continut pentru aplicatie; e o situatie putin atipica, in general content-ul vine din exterior.

Revenim, fisierul ServerData.json este adaugat in proiectul nostru si are in Target membership – File Inspector activat numele proiectului pentru a fi inclus la compilare.

Pentru a extrage informatiile din JSON si a le transforma in Data definim urmatoarea metoda:

 

public func dataFromFile(_ filename: String) -> Data? {

    @objc class TestClass: NSObject { }

    let bundle = Bundle(for: TestClass.self

    if let path = bundle.path(forResource: filename, ofType: “json”) {

        return (try? Data(contentsOf: URL(fileURLWithPath: path)))

    }

    return nil

}

bundle va fi un “container” care va incarca din path fisierul cu extensia json in caz ca exista (if let) urmand a obtine content-ul in format Data al json-ului.

 

Share Button

Swift 3 – Ordonarea unui array care are o dependență cu alt array

Sunt în situația în care am următorii vectori:

let array1: [String] = [“Diana”, “Cornel”, “Andrei”, “Stefan”, “Traian”]

let array2: [Int] = [1, 0, 2, 0, 3]

 

Vreau să ordonez lexicografic array1 și implicit pe cel de-al doilea care e dependență al celui dintâi – array2.

 

1. Combin cei doi vectori într-un vector cu zip:

let combined = zip(array1, array2).sorted {$0.0 < $1.0}

print(combined) // “[(“Andrei”, 2), (“Cornel”, 0), (“Diana”, 1), (“Stefan”, 0), (“Traian”, 3)]”

 

2. După ce am ordonat acest vector, extrag cei doi vectori cu map:

let sorted1 = combined.map {$0.0}

let sorted2 = combined.map {$0.1}

print(sorted1)  // “[“Andrei”, “Cornel”, “Diana”, “Stefan”, “Traian”]”

print(sorted2)  // “[2, 0, 1, 0, 3]”

 

 

 

Share Button

Server-side Swift in 5 pasi

Problema pentru multi developeri Swift este aceea ca mereu depind de servicii web scrise, adesea, de alti programatori. In ajutorul dezvoltatorilor iOS vine Perfect, un set de librarii ce ne permite sa dezvoltam servere HTTP scriind cod Swift.

BONUS: Perfect mai pune la dispozitie si o librarie ce ne permite sa dezvoltam, tot in Swift, servere APNs (Apple Push Notifications). Pentru detalii: https://github.com/PerfectlySoft/Perfect-Notifications 

Continue reading

Share Button