poniedziałek, 4 stycznia 2016

iOS - Swift w aplikacji

Eklektycznej wędrówki po platformach, językach i technologiach ciąg dalszy. Dziś padło na Swift. Jakiś czas temu zwróciłem uwagę na ten język. Jeśli chodzi o aplikacje iOS w tym języku, to można streścić to w jednym zdaniu. Generalnie w XCode jest wszystko tak samo jak podczas pisania w Objective-C, operujemy na tym samym z grubsza API, tylko kod piszemy w Swift –;)  A to jest nowocześniej i krócej.

 

projekt aplikacji w XCode w Swift – layout tworzymy analogicznie jak wcześniej

import UIKit

class ViewController: UITableViewController {

let array = [“item1”, “item2”, “item3”]

override func viewDidLoad() {

       super.viewDidLoad()

       tableView.rowHeight = 70

       tableView.backgroundView = UIImageView(image: UIImage(named: “breads”))

}

override func viewDidAppear(animated: Bool) {

      super.viewDidAppear(animated)

      navigationController?.navigationBar.alpha = 0.5

}

override func tableView(tableView: UITableView, numberOfRowsInSection: Int, section: Int) –> Int {

       return array.count;

}

}

outlety w designerze tworzy się podobnie jak wcześniej

class XController: UIViewController {

@IBOutlet var titleText: UITextField!

}

 

model

nowsza wersja Swift:

let cell = sender as! customcell

class Recipe: NSObject {

var title: String?

init (title: String) {

      self.title = title

}

override init() {

     super.init()

}

}

class RecipeManager: NSObject {

static var recipes = [Recipe]()

class func AddRecipe(title: String) {

       var r = Recipe(title: title)

       recipes.append(r)

}

}

 

tworzenie akcji za pomocą designera podobnie jak wcześniej

@IBAction func doneButton_click(sender: AnyObject) {

}

obsługa zmian wartości

NSNotificationCenter.defaultCenter().addObserver(self, selector: “textTitleDidChange”, name: UITextFieldTextDidChangeNotification, object: nil)

func textTitleDidChange() {

}

dodawanie animacji do przycisku

@IBOutlet var activityIndicator: UIActivityIndicatorView!

activityIndicator.startAnimating()

let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))

dispatch_after(time,

dispatch_get_main_queue()) {

        self.activityIndicator.stopAnimating()

}

usuwanie wiersza z animacją

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

if (editingStyle == .Delete) {

       …

       tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

}

}

persystencja danych

var defaults = NSUserDefaults.standardUserDefaults()

var myobject = defaults.objectForKey(“myobject”) as? String

defaults.setObject(“mystring”, forKey: “myobject”)

class Recipe: …, NSCoding {

required init(coding aDecoder: NSCoder) {

       if let titleDecoded = aDecoder.decodeObjectForKey(“title”) as? String {

              title = titleDecoded

       }

}

}

Brak komentarzy: