Git Hub
коротко
90 заметок с тегом

Swift

Ctrl + ↑ Позднее

iOS: Модальные окна

4 ноября 2016, 11:42

закрытие модального окна

dismiss(animation:true,nil)

чтобы окно-всплывашка была поверх текущего окна

  1. выставляем цвет у View backgound: Clear Color
  2. у ViewController указыаем presentation: Over Current Context
let frame:CGRect   = CGRect(x: 50, y: 30, width: 200, height: 300)
        self.view.frame           = frame

ставим рамку и цвет рамки у PopUp окна

override func viewDidLayoutSubviews() {
     ... 
       self.view.layer.borderWidth = 1
        self.view.layer.borderColor = UIColor.black.cgColor
}

получаем контроллер из Storyboard программно

let SpecialViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SpecialViewController") as! SpecialViewController
#iOS   Swift

Разница между Class и Struct на примере

28 августа 2016, 11:03

Class vs Struct


class Target {
    var location = ""
}

//struct Target {
//    var location = ""
//}

class Pilot {
    var target: Target = Target()
}

class Script {
    
    func run() {
        let luke = Pilot()
        let wedge = Pilot()
   
        luke.target.location = "Star Deth" // Люку приказывают лететь к звезде смерти
        wedge.target = luke.target         // Вейджу приказано лететь туда же
     
        print("Luke target: \(luke.target.location)")
        print("Wedge target: \(wedge.target.location)\n\n")
        
        wedge.target.location = "Return to base" // Вейджу приказано вернуться на базу
        
        print("Luke target: \(luke.target.location)")
        print("Wedge target: \(wedge.target.location)\n\n")
        let result = luke.target.location.compare("Star Deth")
        if result.rawValue == 0 {
            print("Rebel wins ") 
        }
        else {
            print("Empire wins ")
        }
   }

}
Swift

iOS hide keyboard

22 июня 2016, 13:58

UITextViewDelegate

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        if(text == "\n") {
            textView.resignFirstResponder()
            return false
        }
        return true
    }

но это не выход если вам нужно

Swift

NotificationCenter

14 июня 2016, 9:43

описываем действие которое сработает как только будет принято сообщение

func actionHandler(){
      print("It's work!")
}

добавляем наблюдателя и обработчик события/оповещения

NotificationCenter.default.addObserver(self, selector: #selector(actionHandler), name: Notification.Name(rawValue: eventName), object: nil)

Послываем сообщение которое примет центр и передаст обработчику

NotificationCenter.default.post(name: Notification.Name(rawValue: eventName), object: nil)
Swift

lazy var

21 мая 2016, 10:41
lazy var context: NSManagedObjectContext = {
        [unowned self] in
        return self.persistentContainer.viewContext
    }()
Swift

PanGesture

11 мая 2016, 18:58
@IBAction func handlePan(_ sender: UIPanGestureRecognizer){
        let translation = sender.translation(in: self.view)
        self.view.center.x += translation.x
        sender.setTranslation(CGPoint.zero, in: self.view)
    }
Swift

Сравниваем даты из NSDate

22 апреля 2016, 21:56
var dateComparisionResult:NSComparisonResult = currentDate.compare(endDate)
 
    if dateComparisionResult == NSComparisonResult.OrderedAscending {
        //  Текущая дата currentDate меньше конечной даты endDate
    }
    else if dateComparisionResult == NSComparisonResult.OrderedSame {
        //  Текущая дата currentDate и конечная дата endDate одинаковы
    }
    else if dateComparisionResult == NSComparisonResult.OrderedDescending {
        //  Текущая дата currentDate больше конечной даты endDate
    }
Date   Swift

CoreData: Create Read Update Delete

13 апреля 2016, 15:30

https://habrahabr.ru/post/303798/

//
//  DataHelper.swift
//  DaysList
//
//  Created by Kirill on 13/03/2016.
//  Copyright © 2016 Kirill. All rights reserved.
//

import Foundation
import UIKit
import CoreData

class DataHelper{
    
    var context:NSManagedObjectContext
    
    init(context _context:NSManagedObjectContext){
        self.context = _context
    }
    
    class func addRecord(_ _comment:String) -> Int64 {
        
        let newId:Int64 = (getLastId()+1)
        let context = persistentContainer.viewContext
        let day = Day(context: context)
        day.id = newId
        day.comment = _comment
        print("added day id=\(day.id):\(day.comment)")
        
        DataHelper.saveContext()
        
        return day.id
    }
    
    class func getAll(){
        
    }
    
    /// Изменяем элемент
    ///
    /// - Parameters:
    ///   - id: <#id description#>
    ///   - _comment: <#_comment description#>
    class func updateById(id: Int64, comment _comment:String){
      
        let day = getById(id: id)
        
        if (day != nil && (day?.id)! > 0){
            day?.comment = _comment
            saveContext()
        }

    }
    
    
    
    class func deleteById(_ id:Int64){
        let context = persistentContainer.viewContext
        let day = getById(id: id)
        
        if ((day?.id)! > 0){
            context.delete(day!)
        }
    }
    
    class func delete<T>(item:T){
        let context = persistentContainer.viewContext
        context.delete(item as! NSManagedObject)
    }
    
    
    class func getById(id:Int64)-> Day?{
        let context = persistentContainer.viewContext
        let request: NSFetchRequest<Day> = Day.fetchRequest()
        
        request.predicate = NSPredicate(format: "id == %@",
                                        argumentArray: [id])
       
        
        
        var days:[Day] = []
        do{
            days = try context.fetch(request) as [Day]
        }
        catch{
            print("getById error")
        }
        
       let day =  days.first
       return day
    }
    
    
    class func getLastId()-> Int64 {
        let context = persistentContainer.viewContext
        let request: NSFetchRequest<Day> = Day.fetchRequest()
        
        request.predicate = NSPredicate(format: "id == max(id)",
                                        argumentArray: [])
        
        var days:[Day] = []
        do{
            days = try context.fetch(request) as [Day]
        }
        catch{
            print("getLastId error")
        }
        
        let day =  days.first
        return (day?.id)!
    }
    
    static var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "DaysList")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {

                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()
    
    class func saveContext () {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }
    
}
let resultId =  DataHelper.addRecord("текстовая строка")

Памятка

Обычно файл базы данных лежит где-то здесь

/Users/<USER>/Library/Developer/CoreSimulator/Devices/<DEVICE_ID>/data/Containers/Data/Application/<APPLICATION_ID>/Documents/<FileName>.sqlite
CoreData   iOS   Swift

массив уникальных знаений

25 апреля 2015, 1:19

создать массив заполненный случайными цифрами 0..10

var array:[Int] = []
for i in 1...20 {
    let randomValue:UInt32 = (arc4random_uniform(10))
    array.append(Int(randomValue))
}

оставить уникальные элементы

вариант 1

let unique = Array(Set(array))

вариант 2

var unique = [Int]()
for e in array {
    if !unique.contains(e){ unique.append(e) }
}
Swift

Swift: Обработка ошибок

18 апреля 2015, 12:41

Уровень 1

enum ErrorsE: Error {
    case System
    case User
    case Background
}

class Handle {
    func save() throws {
        for i in 1...3 {
            if i == 2 {
                throw ErrorsE.User
            }
        }
        
    }
}

class AppHandle {
    
    func run(){
        let e = Handle()
        do {
          try  e.save()
        }
        catch let error {
            print("error: \(error)")
        }
    }
}
AppHandle().run()
Swift