标签 swift 下的文章

sqlite3的基本使用

使用之前先倒入sqlite3

//
//  ViewController.swift
//  数据库
//
//  Created by zhang on 16/3/13.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit
class ViewController: UIViewController {
    var db:COpaquePointer = COpaquePointer()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.openDataBase()
        // Do any additional setup after loading the view, typically from a nib.
    }
    func openDataBase()
    {
        // 拼接文件名
        let filePath = "\(NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!)database.sqlite"
        print(filePath)
        // 打开数据库
        if (sqlite3_open(filePath, &self.db) == SQLITE_OK) {
            print("打开成功");
        }else{
            print("打开失败");
        }
    }
    func execute(sql:String)->Bool
    {
        var flag:Bool
        if (sqlite3_exec(self.db, sql, nil, nil, nil) == SQLITE_OK) {
            flag = true;
        }else{
            flag = false;
        }
        return flag;
    }
    func query(sql:String)->[NSMutableArray]
    {
        // 1. 准备语句
        var stmt: COpaquePointer = nil
        /**
        1. 数据库句柄
        2. SQL 的 C 语言的字符串
        3. SQL 的 C 语言的字符串长度 strlen,-1 会自动计算
        4. stmt 的指针
        5. 通常传入 nil
        */
        var data:[NSMutableArray] = []
        if sqlite3_prepare_v2(self.db, sql, -1, &stmt, nil) == SQLITE_OK {
            // 单步获取SQL执行的结果 -> sqlite3_setup 对应一条记录
            while sqlite3_step(stmt) == SQLITE_ROW {
                // 获取每一条记录的数据
                data.append(recordData(stmt))
            }
        }
        return data
    }
    ///  获取每一条数据的记录
    ///
    ///  :param: stmt prepared_statement 对象
    func recordData(stmt: COpaquePointer)->NSMutableArray
    {
        // 获取到记录
        let array = NSMutableArray()
        let count = sqlite3_column_count(stmt)
        print("获取到记录,共有多少列 \(count)")
        // 遍历每一列的数据
        for i in 0..<count {
            let type = sqlite3_column_type(stmt, i)
            // 根据字段的类型,提取对应列的值
            switch type {
            case SQLITE_INTEGER:
                print("整数 \(sqlite3_column_int64(stmt, i))")
                array.addObject("\(sqlite3_column_int64(stmt, i))")
            case SQLITE_FLOAT:
                print("小树 \(sqlite3_column_double(stmt, i))")
                array.addObject(sqlite3_column_double(stmt, i))
            case SQLITE_NULL:
                print("空 \(NSNull())")
            case SQLITE_TEXT:
                let chars = UnsafePointer<CChar>(sqlite3_column_text(stmt, i))
                let str = String(CString: chars, encoding: NSUTF8StringEncoding)!
                array.addObject(str)
                print("字符串 \(str)")
            case let type:
                print("不支持的类型 \(type)")
            }
        }
        return array
    }
    @IBAction func createDataBase(sender: AnyObject) {

    }
    @IBAction func createTable(sender: AnyObject) {
        let sql = "create table if not exists t_user (id integer primary key autoincrement,name text,phone text);"
        if self.execute(sql)
        {
            print("执行成功")
        }
        else
        {
            print("执行成功")
        }
    }

    @IBAction func insert(sender: AnyObject) {
        let sql = "insert into t_user (name,phone) values ('\(rand())','\(rand())')"
        if self.execute(sql)
        {
            print("执行成功")
        }
        else
        {
            print("执行成功")
        }
    }
    @IBAction func deleteTest(sender: AnyObject) {
        let sql = "DELETE FROM t_user "
        if self.execute(sql)
        {
            print("执行成功")
        }
        else
        {
            print("执行成功")
        }
    }
    @IBAction func update(sender: AnyObject) {
        let sql = "UPDATE t_user SET name = '2222222'"
        if self.execute(sql)
        {
            print("执行成功")
        }
        else
        {
            print("执行成功")
        }
    }
    @IBAction func selectTest(sender: AnyObject) {
        let sql = "select * from t_user;"
        print(self.query(sql))
    }
}

VFL的使用

和http://jinblog.com/archives/520.html的文章两个例子完成的效果一样,注意格式

//
//  ViewController.swift
//  UIDynamic的使用
//
//  Created by admin on 16/2/29.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var viewA: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.constraintB()
    }
    func constraintB()
    {
        // 创建控件
        let viewA = UIView()
        viewA.translatesAutoresizingMaskIntoConstraints = false
        viewA.backgroundColor = UIColor.blueColor()
        self.view.addSubview(viewA)
        let viewB = UIView()
        viewB.translatesAutoresizingMaskIntoConstraints = false
        viewB.backgroundColor = UIColor.brownColor()
        self.view.addSubview(viewB)
        // 创建约束
        // 水平
        let viewAh = NSLayoutConstraint.constraintsWithVisualFormat("H:|-30-[viewA]-30-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["viewA" : viewA])
        // 垂直
        let viewAv = NSLayoutConstraint.constraintsWithVisualFormat("V:|-30-[viewA(50)]-[viewB(==viewA)]", options: NSLayoutFormatOptions.AlignAllRight, metrics: nil, views: ["viewA" : viewA,"viewB" : viewB])
        // 比例值,需要用构造方法来完成
        let viewBwidth = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Width, multiplier: 0.5, constant: 0)
        // 添加约束
        self.view.addConstraint(viewBwidth)
        self.view.addConstraints(viewAh)
        self.view.addConstraints(viewAv)
//        let viewB
    }
    func constaintA()
    {
        // 创建控件
        let viewA = UIView()
        viewA.translatesAutoresizingMaskIntoConstraints = false
        viewA.backgroundColor = UIColor.blueColor()
        self.view.addSubview(viewA)
        let viewB = UIView()
        viewB.translatesAutoresizingMaskIntoConstraints = false
        viewB.backgroundColor = UIColor.brownColor()
        self.view.addSubview(viewB)

        // 创建约束
        // 水平方向,左右有间距,要加“|”,并把间距用“-”分隔
        let viewAh = NSLayoutConstraint.constraintsWithVisualFormat("H:|-30-[viewA]-[viewB(==viewA)]-30-|", options: NSLayoutFormatOptions.AlignAllBottom, metrics: nil, views: ["viewA" : viewA,"viewB" : viewB])
        // 垂直方向,左边没有约束就不要加 “|”,直接固定数字,直接写数字,不要加等号
        let viewAv = NSLayoutConstraint.constraintsWithVisualFormat("V:[viewA(50)]-30-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["viewA" : viewA])
        self.view.addConstraints(viewAh)
        self.view.addConstraints(viewAv)
        // 没有对齐,传这个值就行
        let viewBv = NSLayoutConstraint.constraintsWithVisualFormat("V:[viewB(==viewA)]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["viewA" : viewA,"viewB" : viewB])
        self.view.addConstraints(viewBv)
    }
}

通过代码使用autolayout

//
//  ViewController.swift
//  autolayout-代码
//
//  Created by zhang on 16/2/29.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.constraintB()
    }
    func constraintB()
    {
        // 创建view
        let viewA = UIView()
        viewA.backgroundColor = UIColor.redColor()
        viewA.translatesAutoresizingMaskIntoConstraints = false
        let viewB = UIView()
        viewB.backgroundColor = UIColor.grayColor()
        viewB.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(viewA)
        self.view.addSubview(viewB)

        let viewAleft = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Left, multiplier: 1.0, constant: 30)
        let viewAright = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: -30)
        let viewAtop = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 30)
        let viewAheight = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 60)

        let viewBright = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: 0)
        let viewBheight = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Height, multiplier: 1.0, constant: 0)
        let viewBwidth = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Width, multiplier: 0.5, constant: 0)
        let viewBtop = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 30)
        self.view.addConstraints([viewBwidth,viewBheight,viewBright,viewBtop])
        self.view.addConstraints([viewAleft,viewAright,viewAtop,viewAheight])
    }
    func constraintA()
    {
        // 创建view
        let viewA = UIView()
        viewA.backgroundColor = UIColor.redColor()
        viewA.translatesAutoresizingMaskIntoConstraints = false
        let viewB = UIView()
        viewB.backgroundColor = UIColor.grayColor()
        viewB.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(viewA)
        self.view.addSubview(viewB)
        // 创建约束
        // 左
        let viewAleft = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 30)
        // 下
        let viewAbottom = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: -30)
        // 宽度
        let viewAwidth = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: viewB, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)
        // 高度
        let viewAheight = NSLayoutConstraint(item: viewA, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 50)
        // 右
        let viewBright = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: -30)
        // 下
        let viewBbottom = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0)
        // 高
        let viewBheight = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0)
        // 左
        let viewBleft = NSLayoutConstraint(item: viewB, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: viewA, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 30)
        // 添加约束
        self.view.addConstraints([viewAleft,viewAbottom,viewAheight,viewAwidth])
        self.view.addConstraints([viewBbottom,viewBright,viewBheight,viewBleft])
    }
}

UIDynamicAnimator(仿真器)的使用

//
//  ViewController.swift
//  UIDynamic的使用
//
//  Created by admin on 16/2/29.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var viewA: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let touche = (touches as! NSSet).anyObject()
        self.snap((touche?.locationInView(self.view))!)
    }
    // 创建仿真器并指定仿真范围
    lazy var animator:UIDynamicAnimator = UIDynamicAnimator(referenceView: self.view)
    // 捕捉行为
    func snap(point:CGPoint)
    {
        // MARK: 创建仿真器
        self.animator.removeAllBehaviors()
        // MARK: 创建行为
        let snap = UISnapBehavior(item: self.viewA, snapToPoint: point)
        // 设置阻力
        snap.damping = 1000
        // 把行为加入到仿真器
        self.animator.addBehavior(snap)
    }
    // 重力行为仿真测试
    func gravityAttr()
    {
        // MARK: 创建仿真器

        // MARK: 创建行为
        let collision = UICollisionBehavior(items: [self.viewA])
        collision.translatesReferenceBoundsIntoBoundary = true
        let gravity = UIGravityBehavior(items: [self.viewA])
        // MARK: 属性设置
        // 重力角度,默认是 90
        gravity.angle = CGFloat(M_PI * 0.1)
        // 重力的大小,太大的话view会直接消失,应该是被重力压扁了吧。。。。
        gravity.magnitude = 1
        // 向量:具有大小和方向
        gravity.gravityDirection = CGVectorMake(3, 1)
        // MARK: 添加行为到仿真器
        self.animator.addBehavior(collision)
        self.animator.addBehavior(gravity)
    }
    // 碰撞行为仿真属性测试
    func collisionAttr()
    {
        // MARK: 创建仿真器并指定范围

        // MARK: 创建行为
        // 碰撞行为
        let collision = UICollisionBehavior(items: [self.viewA])
        // 把仿真器的bounds作为碰撞的边界
        collision.translatesReferenceBoundsIntoBoundary = true
        // 重力行为
        let gravity = UIGravityBehavior(items: [self.viewA])

        // MARK: 属性测试
        // 添加边界-线段
        let start = CGPointMake(0, self.view.bounds.size.height * 0.5 + self.viewA.bounds.size.height * 0.5)
        let end = CGPointMake(self.view.bounds.size.width, self.view.bounds.size.height * 0.5 + self.viewA.bounds.size.height * 0.5)
        collision.addBoundaryWithIdentifier("line", fromPoint: start, toPoint: end)
        // 添加一条path,view掉下来的时候会像在圆里面滚动
        let bezier = UIBezierPath(ovalInRect: CGRectMake(0, 0 - self.view.bounds.width * 0.5, self.view.bounds.width, self.view.bounds.width))
        collision.addBoundaryWithIdentifier("bezier", forPath: bezier)
        // MARK:  把仿真行为添加到仿真器中
        self.animator.addBehavior(collision)
        self.animator.addBehavior(gravity)
    }
    // 重力行为和碰撞行为,view会调到屏幕的下面停住,类似物体落地
    func gravityAndCollision()
    {
        // 创建仿真器并指定范围

        // 创建重力行为
        let gravityBehavior = UIGravityBehavior(items: [self.viewA])
        // 创建碰撞行为
        let collisionBehavior = UICollisionBehavior(items: [self.viewA])
        // 指定碰撞行为边界
        collisionBehavior.translatesReferenceBoundsIntoBoundary = true
        // 将仿真行为添加到仿真器中
        self.animator.addBehavior(gravityBehavior)
        self.animator.addBehavior(collisionBehavior)
    }
    // 重力行为,view会直接掉下来不见掉
    func gravity()
    {
        // 创建仿真器并指定仿真范围,但是直接在函数里面创建是不行的,因为这个函数执行完毕之后仿真器就被销毁了
        // 创建仿真行为
        let behavior = UIGravityBehavior(items: [self.viewA])
        // 将仿真行为添加到仿真器中
        animator.addBehavior(behavior)
    }
}

AFNetworking基本使用

//
//  ViewController.swift
//  AFNet使用
//
//  Created by admin on 16/2/29.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.upload()
    }
    func upload()
    {
        let configuretion = NSURLSessionConfiguration.defaultSessionConfiguration()
        let manager = AFHTTPSessionManager(sessionConfiguration: configuretion)
        // 获得文件url
        let pathUrl = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("1.jpg", ofType: nil)!)
        manager.POST("http://test.com/upload.php", parameters: nil, constructingBodyWithBlock: { (formData:AFMultipartFormData) -> Void in
            // 添加文件
            try? formData.appendPartWithFileURL(pathUrl, name: "uploadFile[]", fileName: "newImage.jpg", mimeType: "image/jpeg")
            // try? formData.appendPartWithFileURL(pathUrl, name: "uploadFile[]", fileName: "newImage.jpg", mimeType: "image/jpeg")
            }, progress: { (progress:NSProgress) -> Void in
                print(progress)// 上传进度
            }, success: { (task:NSURLSessionDataTask, data:AnyObject?) -> Void in
                print(data) // 返回的数据
            }) { (task:NSURLSessionDataTask?, error:NSError) -> Void in
                print(error) // 错误
        }
    }
    func get()
    {
        let manager = AFHTTPSessionManager()
        let data = ["username":"张三","password":"zhang"]
        manager.GET("http://test.com/login.php", parameters: data, success: { (task:NSURLSessionDataTask, data:AnyObject?) -> Void in
            print(data)
            }) { (task:NSURLSessionDataTask?, error:NSError) -> Void in
                print(error.userInfo)
        }
    }
    func post()
    {
        let manage = AFHTTPSessionManager()
        let data = ["username":"张三","password":"zhang"]
        manage.POST("http://test.com/login.php", parameters: data, progress: { (progress:NSProgress) -> Void in
            print(progress)
            }, success: { (task:NSURLSessionDataTask, data:AnyObject?) -> Void in
                print(data)
            }) { (task:NSURLSessionDataTask?, error:NSError) -> Void in
                print(error)
        }
    }
}