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)"

}

 

                                                                                                                           未完待续.....

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

你可能感兴趣的:(Swift开发笔记)