Swift开发笔记

随着Swift逐渐趋于稳定,越来越多的公司开始使用Swift写程序,所以现在越来越多的公司需求这方面的人才.

下面我来跟大家分享一下我自己对Swift的基本理解



                                      swift的基本认识

// 跟iOS的OC比起来

// swift语句后面没有分号, 不小心加了也不会保存

// swift导入框架头文件的时候没有尖括号, 直接写

// swift中输出不用加@

// 在swift中, 没有.h 和.m文件, 只要一个.swift文件

// 不需要引入头文件, 除非是系统的头文件

// print比NSLog强大很多

// let: 常量      var: 变量

let a:Int = 12

let str = "hello"

// swift中不支持隐式转换

// OC中强转:(float)a  swift中强转: Float(a)

print(Float(a))

// 在swift中, BOOL值不再是YES和NO,而是true和false

var isTrue:Bool = true



一. 字符串

// 判断字符串是否为空

var testString = "呵呵哒"

isTrue = testString.isEmpty

// swift中字符串可以看做是字符的集合,求字符串的长度

testString.characters.count

// 转码

//str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

// 大小写转换

str.uppercaseString

str.lowercaseString

// 打印拼接字符串

//print("123 \(str)222")

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

let str3 = String(format: "%d-%d",  arguments: [6,8])

let str4 = "asdasdasd"

//print(str2)

//print(str3)

// 字符串剪切

//str4.substringFromIndex(<#T##index: Index##Index#>)

// 转换

let str5: NSString = str2 as NSString

// 判断两个字符串是否相等

print(s1 == s2)

// 交换值

var str1 = "a"

var str2 = "b"

swap(&str1, &str2)




二. 数组

// 不可变数组

let array1 = ["1","2","C","D"]

let array2: [String] = ["1","2","C","D"]

let array3 = [String]()

print(array1)

print(array2)

print(array3)

// 元素个数

array1.count

// 数组遍历 (for - in 遍历要明确指出数组的类型)

for temp in array1 as [String]

{

print(temp)

}

// 元祖遍历

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

{

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

}

// 可变数组

var mArray = [String]()

// 数组的拼接

mArray.append("krystal")

mArray.append("jessica")

//mArray.append(12)

//print(mArray)

// 数组的删除

// 删除个数

mArray.removeFirst(0)

//print(mArray)



三. 字典

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

// 通过key值访问value值

//print(dic["key1"])

// for - in 遍历

for (tempKey, tempValue) in dic

{

print("key = \(tempKey), value = \(tempValue)")

}

// 可变字典

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

// 字典的合并

for (tempKey, tempValue) in dic

{

// 如果key存在,更新键值对,如果不存在,则增加键值对

dic1[tempKey] = tempValue

}

//print(dic1)

var dic2= ["b":10]

// 删除指定key对应的value

dic2.removeValueForKey("b")

// 删除所有

dic2.removeAll()

// 元祖, 类似C里的结构体, 可以存放字符串,数组,字典,而且可以存放在一起

var aaa = ("b",["a","b","c"],["a","b"])

print(aaa.0)

print(aaa.1)

print(aaa.1[0])

print(aaa.2)



四. 可选类型:  ! 和 ?

// ? 可选性 (有值  没值)

// 其实 ?本质上是一个枚举, 有两种状态 optional(有值) optional(没值)

// 如果一个值可能为空, 则是可选类型, 用?

// 可选类型不能直接使用, 必须强制解包, 用!

// 对一个空的可选类型进行解包会引起crash

var a1: String?

a1 = "12345"

//print(a1!)

// (a2 ?? "123")对可选类型进行判断, 如果值为空,给它一个默认值

var a2: String?

a2 = "45678"

//print((a2 ?? "123").characters.count)



五. 选择结构

// 1.if语句

// {}一定不能省略

// if 没有非零即真的概念, 不可以不写判断语句

let b = 10

if b > 5

{

print("b > 5")

}

else

{

print("b < 5")

}

// 可选类型的条件分支

let str6 : String? = "vampire"

// 1. if - let

// if - let: 对可选类型的判断, 如果可选类型为空,则不执行代码块, 如果不为空则用tempStr接收这个可选类型解包后的值

if let tempStr = str6

{

print(tempStr)

}

// 2. if - let - where

// 跟 if - let相似, where是前面定义的tempStr再做一层判断

if let tempStr = str6 where tempStr.characters.count > 2

{

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

}

// 3. guard - let - else

// 如果str为空, 进入代码块执行,最后一定要return; 如果不为空, 强制解包赋值给tempStr, 以便使用

guard let tempStr = str else

{

// code

return

}

tempStr....

2. switch语句

// (1)switch在 OC中 和 在Swift中的区别: 不局限于判断整形, 可以使浮点型, 也可以是字符串

// (2)switch后的()可以省略, {}不可以

// (3)case后至少有一条执行语句

// (4)case后的{}可以省略, break可有可无, 不会造成贯穿

// (5)default一定要写, 只能写在最后

let f = 3.2

switch f

{

case 3.0:

print("===3.0")

case 3.1:

print("===3.1")

case 3.2:

print("===3.2")

default:

print("unknown")

}

3. 枚举

// 可以关联浮点型, 字符串, 没有默认的关联值

// 关联的如果是Int类型, 会默认递增, 如果不是, 必须每个枚举都关联上对应的值

enum month:Float

{

case January = 11.0

case February = 11.1

case March = 11.2

case April = 11.3

}

// 如果明确指出一个变量/常量属于哪种类型的话, 可以直接 .枚举值

let months = month.January

//let months: month = month.January

//let months: month = .January

var month1 = month.January

month1 = .March

// hashValue: 第几个

// rawValue: 对应的值

switch month1

{

case .January:

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

print(month1)

case .February:

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

print(month1)

case .March:

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

print(month1)

case .April:

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

print(month1)

}



六.循环结构


/*该写法在Swift2.2版本后已被废弃

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

{

}

*/

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

{

print(i)

}

// 0...5 -> [0,5]    0..<5 -> [0,5)

for i in 0..<5

{

print("i = \(i)")



七. 闭包

/*

{

(参数名: 参数类型) -> 返回值类型

in

code

}

*/

// 无参无返

let block = {

() ->  Void in

print("无参无返")

}

block()

// 有参无返

// tempStr: 外部参数

// Swift3.0版本后不可用

let block1 = {

(tempStr1 str1: String, tempStr2 str2: String) -> Void in

print("有参无返: \(str1), \(str2)")

}

block1(tempStr1: "a", tempStr2: "b")

let block2 = {

(str1: String, str2: String) -> Void in

print("有参无返: \(str1), \(str2)")

}

block2("krystal", "jessica")

// 无参有返

let block3 = {

() -> String in

print("无参有返")

return "无参有返"

}

print(block3())

// 有参有返

let block4 = {

(a: Int, b: Int) -> Int in

print("有参有返: \(a), \(b)")

return a + b

}

print(block4(3, 2))



八. 函数

/*

func 方法名(参数名:参数类型)

{

code

}

*/

// 函数的四种类型

// 1. 无参无返

func test()

{

print("呵呵哒")

}

test()

// 2. 无参有返

func test1() -> Int

{

return 10

}

print(test1())

// 3. 有参无返

func test2(num1: Int, num2: Int)

{

print(num1 + num2)

}

test2(2, num2: 3)

// 4. 有参有返

func test3(num1: Int, num2: Int) -> Int

{

return num1 + num2

}

print(test3(10, num2: 10))

// 5. 元祖作为返回值

func yuanzu(num1: Int, num2: Int) -> (Int, Int)

{

return (num1 + num2, num1 * num2)

}

print(yuanzu(5, num2: 6))


// 输入两个字符串, 输入一个闭包(将刚才输入的两个字符串当做参数, 并且返回一个拼接好的新的字符串)

func cString(str1: String, str2: String, block5:(tempStr1: String, tempStr2: String) -> String)

{

// 执行闭包

let string3 = block5(tempStr1: str1, tempStr2: str2)

print(string3)

}

cString("你好", str2: "haha") { (tempStr1, tempStr2) -> String in

return "\(tempStr1)\(tempStr2)"

}

 

                                                                                                                           未完待续.....

                                                                                                                           持续更新中.............

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

推荐阅读更多精彩内容