Swift项目开发:----swift知识点准备(持续更新)

一、基础的几个知识点,很简单,但是必须知道和掌握

1.常量和变量

var:变量修饰词

let:常量修饰词

2.字符串获取长度(两种方法)

let str1 = "hello"

str.characters.count

let str2 = "hello"

str2.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

3.大小写转换

转大写:str.uppercaseString

转小写:str.lowercaseString

4.判断相等

直接用“==”来判断

5.拼接

let str2 = String(format: "%02d:%02d", 1,2)

let str3 = String(format: "%02d-%02d", arguments: [1,2])

print(str2)

print(str3)

6.剪切字符串

str2.substringFromIndex(index: Index)

7.字符串其他操作转化为NSString在去操作

let str4:NSString = str2 as NSString

8.数组相关知识

   8.1swift的数组可以和oc的数组转换,在OC中init/ initWith在swift就是转化为()来表示初始化

let array1 = ["a","b","c"]

let array2 = [String]()

8.2 数组个数

数组个数.count

8.3 遍历数组

 遍历数组forin要明确的指出数组的类型

for temp in array1 as [String] {

print(temp)

print(temp.characters.count)

}

 8.4 元组遍历

//元组遍历(能得到下标)

for(index, value) in array1.enumerate() {

print("index = \(index),value = \(value)")

}

8.5可变数组

初始化一个String类型的数组: var mutableArray = [String]()

向数组添加元素:

mutableArray.append("hello")

mutableArray.append("world")

mutableArray.append("23")

print(mutableArray)

打印之后的结果:["hello","world","23"]

mutableArray.removeAll(keepCapacity: Bool)一出全部,是否保存原有的空间

mutableArray.removeFirst(n: Int)从哪个为第一个开始删除

9.字典

9.1 创建一个字典:

let dict = ["key1":"value1","key2":"value2","key3":"value3"]

print(dict)

print(dict["key1"])

9.2 遍历字典forin

for(tempkey,tempvalue) in dict {

print("key = \(tempkey),value = \(tempvalue)")

//在swift中站位用\( )表示,括号内填要输出的参数

}

9.3 可变字典

var dict3 = ["key":"value"]

9.4 字典的合并

for(tempkey,tempvalue) in dict {

//如果存在则是一个更新键值对的操作,否则就是一个增加键值对的操作

dict3[tempkey] = tempvalue

}

10.可选类型

10.1 

    如果一个值可能为nil,那么这个值就是可选类型,用?表示。同样在打印后在输出栏显示时被optional包围的就是可选类型

10.2 

    可选类型不能直接使用,必须强制解包,!就是强制解包。对nil强制解包会crash。当在打印的输出栏显示 “unexpectedly found nil while unwrapping an Optional value”时,就是对空的可选类型强制解包出现的错误

10.3 一个简单示例

var a1:String?

a1 = "12345"

print(a1!)

print(a1!.characters.count)

10.4 对可选类型进行判断,若为空则给他一个默认值

print(a1 ?? "234")

11 if语句

if语句和OC中不同的是()的条件语句可以省略。if没有非零即真的概念,只有true和false的概念

let temvalue = 10

if temvalue > 5 {

print("tempvalue >5")

}

14. 可选类型的条件分支

letstr:String? ="hello"

(1) if-let对可选类型的判断,若可选类型为空,不执行代码块,若果不为空,则用tempstr来接受此刻这个可选类型解包后的值

if let tempStr = str {

print(tempStr)

}

(2)if-let-where跟if-let相似,where是对前面定义的这个局部变量在做一层判断

if let tempStr = str where tempStr.characters.count>2{

print("tempStr.length =\(tempStr.characters.count)")

}

(3)guard-let-else(守护)如果可选类型为nil,则执行code代码块,最后一定要return,如果不为nil则强制解包后的值赋给tempStr这样在外面可以使用tempStr

guard let tempStr = str else {

return

}

tempStr

15  switch

在swift的switch中不局限整形,可为浮点型,字符串型,

switch后面的小括号可以省略,大括号不能省略

case后面至少有一条执行语句,并且case后面的大括号可以省略,

break可以不写,不会造成贯穿,default一定要写,并且只能在最后写

let f =3.2

switch f {

case3.0:

print("===3.0")

case3.1:

print("===3.1")

case3.2:

print("3.2")

default:

print("unknown")

}

16 循环

下面的方法已经被废弃

for (var i = 0;i < 5;i++) {

}

正确的是

for var i = 0; i < 5; i++ {

print(i)

}

在左闭右开区间[0,5)循环

for var i in 0..<5 {

print(i)

}

在闭区间[0,5]循环

for var i in 0...5 {

print(i)

}

17 枚举(枚举可以关联任何类型浮点,字符串,整型)

关联若是int,会默认递增上去,若不是int必须每个枚举值都关联上值。

enumMonth:Float{

caseJanuary =1.1

caseFebruary =1.2

caseMarch =1.3

caseAppril =1.4

caseMay =1.5

caseJune =1.6

}

varmonth1:Month=Month.January

letmonth2 =Month.February

letmonth3:Month= .March

//如果已经明确的指出一个变量是属于那种类型的枚举的话,可以直接给枚举赋值

month1= .Appril

switchmonth1{

case.January:

print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

case.Appril:

print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

case.March:

print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

default:

print("unknown")

}

18 闭包

{

(参数名:参数类型(多个参数逗号隔开))->返回值类型

in

code(自己写代码)

}

19 函数

函数的写法:

func方法名(参数列表)->返回值类型{

code

}

19.1 无参无返

let closure = {

()->()//()或者()->Void

in

print("无参无返")

19.2 有参有返

func add(a:Int)->Int {

return a+10

}

print(add(100))

19.3无参有返

func abb()->String {

return "无参有返"

}

print(abb())

19.4有参无返

func acc(a:Int)->Void {

print("有参无返")

}

print(acc(1))

20 输入俩个字符串,输入一个闭包(将输入的两个字符串拼接为一个字符串)

编写函数:

func combineString(str1:String,str2:String,closure:(tempstr1:String,tempstr2:String)->String) {

//执行闭包

letstring = closure(tempstr1: str1, tempstr2: str2)

print(string)

}

调用:

combineString("love", str2:"you") { (tempstr1, tempstr2) ->Stringin

return"\(tempstr1)\(tempstr2)"

}

21.OC中有的懒加载在swift中也有

写法:

lazy var变量名:变量类型= {

code

return

}()

代码:写懒加载一个不同

lazy var btn:UIButton= {

var tempBtn =UIButton(type:.ContactAdd)

tempBtn.frame=CGRectMake(90,200,50,50)

tempBtn.backgroundColor=UIColor.greenColor()

returntempBtn

}()

22.异常捕获(很经典)

在OC中我们解析文件或者网络解析时当解析的文件中有错时,会crash,但是在swift中有了异常捕获这个方法,会很容易的知道文件解析出错,不用再看代码半天找bug。

do{

let path =NSBundle.mainBundle().pathForResource("iOS", ofType:"json")

let data:NSData=NSData(contentsOfFile: path!)!

let rootArray = try NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers) as!  [[String:String]]

print(rootArray)

} catch {

//异常捕获。序列化出错就会自动来到这里

print("error")

}

23 字典转模型

在KVC模式中。我们 会用到字典转模型给model赋值。一般的OC中写的方法是setValuesForKeyWithDictionary:的方法但是在swift中不是!下面就看看该怎么写。

在model文件中编写:

var name:String?

var gender:String?

var age:Int=0//注意:字典转模型中,模型中如果有基本的数据类型的话,基本的数据类型不可以给我可选类型,否则在KVC赋值就会出现错误找不到对应的Key值。若为可选类型该给初始值

//字典转模型

init(dict:[String:AnyObject]) {

super.init()

setValuesForKeysWithDictionary(dict)

}

如果自定义了初始化方法并且没有实现系统默认的初始化方法,那么外界访问不到该类的默认初始化方法,想要访问到就要手动实现

刚写到KVC模式,就想到面试题里有的会问的“KVC和KVO的区别”,很搞笑,这两个压根没啥关系!(要非扯有关系,就得说:KVO建立在 KVC 之上)

KVC:Key Value Coding (键值编码)通过字符串简介访问对象的属性的方式 

KVO: Key Value Observing(观察着模式) 通过字符串来监听对象属性的变化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,821评论 0 6
  • swift的语法确实高端,用习惯了编程特别顺手。 swift中的变量分为两类,变量(var)和常量(let),常量...
    爱新觉罗fate阅读 300评论 0 0
  • 虽然Swift这门语言还很年轻,但是不可否认的是Swift很强大,也很便捷,但是习惯于OC编程之后再去写swift...
    One苹果OneDay阅读 672评论 0 2
  • 首先创建swift工程 选中Command Line Tool, 点击Next 语言栏选中Swift 接下来就创建...
    ZYZZZ阅读 362评论 0 3
  • 1.新建Xocode Swift 程序 2.(基本使用) 在Swift中没有.h 和.m文件 只有一个.Swift...
    圆小米123阅读 1,617评论 0 7