欢迎来真孝善网,为您提供真孝善正能量书籍故事!

Swift编程语言入门指南

时间:10-29 神话故事 提交错误

大家好,关于Swift编程语言入门指南很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!

添加桥接构建设置-(搜索Bridg)Objective-C Bridging Header-添加项目名称/Bridge.h

Bridge.h添加一行如下:

进口

扩展字符串{

/**

将当前字符串拼接到缓存目录末尾

*/

func cacheDir() - 字符串{

让路径=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!作为NSString

返回path.stringByAppendingPathComponent((self as NSString).lastPathComponent)

}

/**

将当前字符串拼接到doc目录末尾

*/

func docDir() - 字符串

{

让路径=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!作为NSString

返回path.stringByAppendingPathComponent((self as NSString).lastPathComponent)

}

/**

将当前字符串拼接到tmp目录末尾

*/

func tmpDir() - 字符串

{

让路径=NSTemporaryDirectory() 作为NSString

返回path.stringByAppendingPathComponent((self as NSString).lastPathComponent)

}

}

打开数据库:SQLiteManager.shareManager().openDB("sql.sqlite")

关闭数据库:let bool=closeDB(db)

创建表:let bool=creatTable("T_Class")

查询:let sql="SELECT * FROM T_Class;"

让res=SQLiteManager.shareManager().execRecordSQL(sql)

删除(更新、插入、修改以下sql语句):

让sql="从T_Class 中删除,其中年龄为10;"

让bool=SQLiteManager.shareManager().execSQL(sql)

子线程执行插入数据库:

SQLiteManager.shareManager().execQueueSQL { (管理器) -() in

//1. 编写SQL语句

让sql="插入T_Person" +

"(姓名、年龄)" +

“价值观”+

"("\(self.name!)", \(self.age));"

//2.执行SQL语句

管理器.execSQL(sql)

打印(NSThread.currentThread())

}

事务+预编译提高效率:

让经理=SQLiteManager.shareManager()

//开始交易

manager.beginTransaction()

对于我来说0.10000

{

让sql="插入T_Person" +

"(姓名、年龄)" +

“价值观”+

"(?);"

manager.batchExecSQL(sql, args: "yy +\(i)", 1 + i)

}

//提交交易

manager.commitTransaction()

类SQLiteManager: NSObject {

私有静态让manager: SQLiteManager=SQLiteManager()

///单粒

类func shareManager() -SQLiteManager {

退货经理

}

//数据库对象

私有变量db:COpaquePointer=nil

/**

开放数据库

:param: SQLiteName 数据库名称

*/

func openDB(SQLiteName: 字符串)

{

//0.获取数据库路径

让路径=SQLiteName.docDir()

打印(路径)

让cPath=path.cStringUsingEncoding(NSUTF8StringEncoding)!

//1.打开数据库

/*

1、需要打开的数据库文件的路径,C语言字符串

2、打开数据库对象(指针)后,以后所有的数据库操作都必须获取这个指针才能进行相关操作。

*/

//打开方法特征:如果指定路径对应的数据库文件已存在,则直接打开

//如果指定路径对应的数据库文件不存在,则创建一个新的

if sqlite3_open(cPath, db) !=SQLITE_OK

{

print("打开数据库失败")

返回

}

//创建串行队列

private let dbQueue=dispatch_queue_create("com.xxx.sql", DISPATCH_QUEUE_SERIAL)

/**

子线程执行数据库插入操作

- 参数action:关闭

*/

func execQueueSQL(action: (manager: SQLiteManager)-())

{

//1.启动子线程

dispatch_async(dbQueue) { () - 无效

打印(NSThread.currentThread())

//2. 执行闭包

行动(经理:自我)

}

}

//2. 创建表

if createTable("T_Class")

{

print("表创建成功")

}别的

{

print("创建表失败")

}

}

///自定义一个SQLITE_TRANSIENT来覆盖系统的

私有让SQLITE_TRANSIENT=unsafeBitCast(-1, sqlite3_destructor_type.self)

//MARK: - 预编译+事务可以提高效率

func batchExecSQL(sql:String, args: CVarArgType.) -Bool

{

//1.将SQL语句转换为C语言

让cSQL=sql.cStringUsingEncoding(NSUTF8StringEncoding)!

//2. 预编译SQL语句

var stmt: COpaquePointer=nil

if sqlite3_prepare_v2(db, cSQL, -1, stmt, nil) !=SQLITE_OK

{

print("预编译失败")

sqlite3_finalize(stmt)

返回错误

}

//3. 绑定数据

var索引:Int32=1

对于args 中的objc

{

如果objc 是Int

{

//print("通过int方法绑定数据\(objc)")

//第二个参数是("?",)在SQL中的位置。注意:是从1开始的

sqlite3_bind_int64(stmt,索引,sqlite3_int64(objc as!Int))

}否则如果objc 是Double

{

//print("通过Double方法绑定数据\(objc)")

sqlite3_bind_double(stmt, 索引, objc as!Double)

}否则如果objc 是字符串

{

//print("通过Text方法绑定数据\(objc)")

让文本=objc as!细绳

让cText=text.cStringUsingEncoding(NSUTF8StringEncoding)!

//第三个参数:是需要绑定的字符串,C语言

//第四个参数: 第三个参数的长度,传入-1系统自动计算

//第五个参数:在OC中直接传nil,但是在Swift中传nil会出大问题。

/*

typedef void (*sqlite3_destructor_type)(void*);

#define SQLITE_STATIC ((sqlite3_destructor_type)0)

#define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1)

如果第五个参数传入SQLITE_STATIC/nil,那么系统将不会保存需要绑定的数据。如果需要绑定的数据提前释放,那么系统就会随意绑定一个值。

如果将SQLITE_TRANSIENT作为第五个参数传入,则系统会复制需要绑定的值,并在绑定成功后释放它。

*/

sqlite3_bind_text(stmt,索引,cText,-1,SQLITE_TRANSIENT)

}

索引+=1

}

//4.执行SQL语句

如果sqlite3_step(stmt) !=SQLITE_DONE

{

print("SQL语句执行失败")

返回错误

}

//5.重置STMT

如果sqlite3_reset(stmt) !=SQLITE_OK

{

print("重置失败")

返回错误

}

//6. 关闭STMT

//注意:只要使用了stmt,就必须关闭

sqlite3_finalize(stmt)

返回真

}

/**

关闭数据库

- 参数db:数据库

*/

func closeDB(db: COpaquePointer) -Bool{

如果sqlite3_close(db)==SQLITE_OK {

返回真

}

返回错误

}

//MARK: - 事务相关(可以提高性能)

//1. 开始交易

函数开始事务()

{

execSQL("开始事务")

}

//2.提交交易

func 提交事务()

{

execSQL("提交事务")

}

//3.回滚

func 回滚事务()

{

execSQL("回滚事务")

}

//创建表

func creatTable(table: String) -Bool

{

//1. 编写SQL语句

let sql="如果不存在则创建表\(table)( \n" +

"id 整数主键自动增量,\n" +

"名称文本,\n"+

"年龄INTEGER \n" +

"); \n"

//2.执行SQL语句

返回execSQL(sql)

}

/**

执行查询以外的SQL语句

:param: sql 要执行的SQL语句

:returns: 是否执行成功,true,执行成功,false,执行失败。

*/

func execSQL(sql: 字符串) -Bool

{

//0. 将Swift 字符串转换为C 语言字符串

让cSQL=sql.cStringUsingEncoding(NSUTF8StringEncoding)!

//在SQLite3中,除了查询(创建/删除/添加/更新)之外,使用相同的函数

/*

1.已打开的数据库对象

2.要执行的SQL语句、C语言字符串

3、执行SQL语句后的回调,通常传入nil

4.是第三个参数的第一个参数,通常传递nil。

5.错误信息,一般是传nil

*/

如果sqlite3_exec(db, cSQL, nil, nil, nil) !=SQLITE_OK

{

返回错误

}

返回真

}

/**

查询所有数据

:returns: 查询的字典数组

*/

func execRecordSQL(sql: String) -[[String: AnyObject]]

{

//0. 将Swift 字符串转换为C 语言字符串

让cSQL=sql.cStringUsingEncoding(NSUTF8StringEncoding)!

//1. 准备数据

//Preparation :理解为预编译SQL语句,检测是否有错误等,可以提供性能

/*

1. 已经打开的数据库对象

2.需要执行的SQL语句

3、需要执行的SQL语句长度传入-1,系统自动计算。

4. 如果要检索数据,需要预编译后的句柄。

5.通常传递nil

*/

var stmt: COpaquePointer=nil

if sqlite3_prepare_v2(db, cSQL, -1, stmt, nil) !=SQLITE_OK

{

print("准备失败")

}

//为成功做好准备

var 记录=[[String: AnyObject]]()

//2.查询数据

//sqlite3_step表示取出一条数据。如果获取数据,将返回SQLITE_ROW。

而sqlite3_step(stmt)==SQLITE_ROW

{

//获取一条记录的数据

让记录=recordWithStmt(stmt)

//将当前获取到的记录添加到数组中

记录.追加(记录)

}

//注意:只要使用了stmt,就必须关闭

sqlite3_finalize(stmt)

//返回查询到的数据

返回记录

}

/**

获取一条记录的值

:param: stmt 预编译SQL 语句

:返回:字典

*/

私有func recordWithStmt(stmt: COpaquePointer) -[String: AnyObject]

{

//2.1 获取当前数据的所有列

让计数=sqlite3_column_count(stmt)

//打印(计数)

//定义一个字典来存储查询到的数据

var record=[String: AnyObject]()

对于0 中的索引.

{

//2.2 获取每一列的名称

让cName=sqlite3_column_name(stmt,索引)

让名称=字符串(CString: cName,encoding: NSUTF8StringEncoding)!

//打印(名称)

//2.3 获取每列的类型SQLITE_INTEGER

让类型=sqlite3_column_type(stmt,索引)

//print("名称=\(名称) , 类型=\(类型)")

开关类型

{

案例SQLITE_INTEGER:

//整形

让num=sqlite3_column_int64(stmt, 索引)

记录[名称]=Int(数字)

案例SQLITE_FLOAT:

//浮点类型

让双=sqlite3_column_double(stmt,索引)

记录[名称]=双精度(双精度)

案例SQLITE3_TEXT:

//文本类型

让cText=UnsafePointer(sqlite3_column_text(stmt, 索引))

让文本=NSString(CString: cText,encoding: NSUTF8StringEncoding)!

记录[名称]=文本

案例SQLITE_NULL:

//空类型

记录[名称]=NSNull()

打印(记录)

默认:

//二进制类型SQLITE_BLOB

//一般情况下,二进制数据不会存储在数据库中

打印("")

}

}

返回记录

}

}

SQLite函数总结

1.打开数据库

int sqlite3_open(

const char *filename, //数据库文件路径

sqlite3 **ppDb //数据库实例

);

2.执行任意SQL语句

int sqlite3_exec(

sqlite3*, //一个打开的数据库实例

const char *sql, //要执行的SQL语句

int (*callback)(void*,int,char**,char**), //SQL语句执行后回调

void *, //回调函数第一个参数

char **errmsg //错误信息

);

3、检查SQL语句的合法性(查询前的准备)

int sqlite3_prepare_v2(

sqlite3 *db, //数据库实例

const char *zSql, //待检查的SQL语句

int nByte, //SQL语句的最大字节长度

sqlite3_stmt **ppStmt, //sqlite3_stmt实例,用于获取数据库数据

常量char **pzTail

);

4.查询一行数据

int sqlite3_step(sqlite3_stmt*); //如果查询一行数据,将返回SQLITE_ROW

5、使用stmt获取某个字段的值(该字段的下标从0开始)

双sqlite3_column_double(sqlite3_stmt*, int iCol); //浮点数据

int sqlite3_column_int(sqlite3_stmt*, int iCol); //整数数据

sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); //长整型数据

const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); //二进制文本数据

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); //字符串数据

SQLite语句

/*简单约束*/

如果不存在则创建表t_student(id INTEGER PRIMARY KEY AUTOINCRMENT, name TEXT,age INTEGER);

如果不存在则创建表t_student(id INTEGER PRIMARY KEY AUTOINCRMENT, name TEXT NOT NULL,age INTEGER NOT NULL);

如果不存在则创建表t_student(id INTEGER PRIMARY KEY AUTOINCRMENT, name TEXT UNIQUE,age INTEGER);

如果不存在则创建表t_student(id INTEGER PRIMARY KEY AUTOINCRMENT, name TEXT,age INTEGER DEFAULT 1);

/*页*/

SELECT * FROM t_student ORDER BY id ASC LIMIT 30, 10;

/*种类*/

SELECT * FROM t_student WHERE 分数50 ORDER BY 年龄DESC;

SELECT * FROM t_student WHERE 分数50 ORDER BY 年龄ASC ,分数DESC;

/*测量*/

SELECT COUNT(*) FROM t_student WHERE 50;

/*别名*/

选择姓名为myName,年龄为myAge,分数为myScore FROM t_student;

从t_student 中选择姓名myName、年龄myAge、分数myScore;

SELECT s.name myName, s.age myAge, s.score myScore FROM t_student s WHERE s.age 50;

/*询问*/

SELECT 姓名、年龄、成绩FROM t_student;

从t_student 中选择*;

/*修改指定数据*/

更新t_student SET 名称="MM" 其中年龄=10;

UPDATE t_student SET name="WW" 其中年龄为7;

UPDATE t_student SET name="XXOO" WHERE 20;

UPDATE t_student SET name="NNMM" WHERE 50 岁且分数10;

/*删除数据*/

从t_student 中删除;

/*更新数据*/

更新t_student SET name="LNJ";

/*插入数据*/

INSERT INTO t_student(年龄、分数、姓名) VALUES ("28", 100, "乔纳森");

INSERT INTO t_student(姓名, 年龄) VALUES ("lee", "28");

插入t_student(score) 值(100);

/*插入数据*/

INSERT INTO t_student(姓名、年龄、分数) VALUES ("lee", "28", 100);

/*添加主键*/

如果不存在则创建表t_student(id INTEGER 主键自动增量,姓名TEXT,年龄INTEGER,分数REAL);

/*添加主键*/

如果不存在则创建表t_student(id INTEGER,姓名TEXT,年龄INTEGER,分数REAL,PRIMARY KEY(id));

/*删除表*/

如果存在则删除表t_student;

好了,文章到这里就结束啦,如果本次分享的Swift编程语言入门指南和问题对您有所帮助,还望关注下本站哦!

用户评论

最怕挣扎

Swift好用的地方越来越多了!

    有6位网友表示赞同!

念旧是个瘾。

感觉学习Swift编程语言真的很有挑战性,但收获也很大啊。

    有5位网友表示赞同!

断秋风

最近在研究Swift UI,期待开发出一个美观且功能强大的 App。

    有20位网友表示赞同!

算了吧

希望未来Swift能变得更加成熟强大,应用范围更广阔!

    有7位网友表示赞同!

颜洛殇

Swift的语法简洁易懂,很容易上手,不像其他语言那么复杂。

    有20位网友表示赞同!

一尾流莺

对于新手来说,学习Swift是一个不错的选择!

    有5位网友表示赞同!

千城暮雪

苹果发布了很多关于Swift的新功能和特性,感觉很期待!

    有5位网友表示赞同!

安好如初

想在iOS开发领域发展,学习Swift是必不可少的。

    有5位网友表示赞同!

迁心

Swift的社区氛围很好,有很多资源和资料可以学习。

    有13位网友表示赞同!

站上冰箱当高冷

现在很多公司都开始使用Swift进行开发,它的未来可期!

    有10位网友表示赞同!

来自火星的我

每次学一些新的 Swift 功能,都会感觉自己进步了好多。

    有20位网友表示赞同!

凝残月

我觉得编写英文代码更容易理解,这也是我选择学习 Swift 的原因之一。

    有6位网友表示赞同!

寻鱼水之欢

对于想成为 iOS 开发者的朋友,建议尽快开始学习 Swift。

    有11位网友表示赞同!

伪心

Swift 真的太牛逼了!它让编程变得更有趣、更高效!

    有5位网友表示赞同!

长裙绿衣

Swift 学习曲线比较平缓,即使是初学者也能轻松掌握基本语法。

    有5位网友表示赞同!

怀念·最初

Swift 的文档写的非常详细,很容易理解和学习。

    有17位网友表示赞同!

一别经年

我喜欢 Swift的自动内存管理特性,它让我编写代码更安心!

    有5位网友表示赞同!

青楼买醉

Swift 结合了现代编程语言的特点,未来发展潜力巨大!

    有14位网友表示赞同!

﹏櫻之舞﹏

Swift 不仅仅是一种编程语言,更是一个充满活力的社区和生态系统。

    有13位网友表示赞同!

【Swift编程语言入门指南】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活