Swift开发iOS学习程序员

swift基础学习Demo汇总

2017-09-21  本文已影响40人  小人不才

篇幅比较长!!!如果真心想学习,还是找个安静的晚上,慢慢阅读,慢慢体会swift的轻妙之处,这里附上本人的github中的demo:https://github.com/tanzhiwen/SwiftTips

欢迎指导学习!!!


目录

01-变量和常量

02-运算符

03-可选项

04-条件语句

05-循环

06-字符串

07-元组

08-数组

09-字典

10-对象和类

11-枚举

12-属性

13-下标脚本



01-变量和常量

1.1基本数据类型

1.整数:Int

2.浮点数: Double表示64位浮点数,Float表示32位浮点数

3.布尔类型: Bool,布尔值只有 true 和 false 两种

4.字符串: String

5.字符: Character

1.2变量和常量

1.变量:值能被修改,var 修饰

2.常量:值不能被修改,let 修饰

var a =20

a =10

let b =20

//b = 10常量不能修改:error:'b' is a 'let' constant

1.会自动推导声明的变量或常量的属性

2.使用【option + 单击】键查看属性的类型

// 1.自动推导类型

let str ="ningcol"

let intValue =10

let floatValue =1.2

// 2.指定数据类型

let doubleValue:Double =10

02-运算符

1基本运算符

var a = 5

let b = 3

// 1.赋值运算符

let c = b

// 2.加减乘除

1 + 2

5 - 3

2 * 3

10.0 / 2.5

2任何情况下都不会做隐式转化,必须以相同类型进行计算

let num1 =1

let num2 =2.2

let num3 = Double(num1) + num2

3必须要显式类型的转化

let j =2.2

let i:Float =1.2

i + Float(j)

4.求余运算

a % b

5负号运算

let minusB = -b

6.组合赋值运算

a +=2

7.比较运算

1==1

2!=1

2>1

1<2

1>=1

2<=1

8.三目运算

let d = a > b ?100:200

9.空合运算

1.空合运算符( a ?? b )将对可选类型 a 进行空判断(可选项内容详见:04-可选项)

2.如果 aName 为 nil,则执行??后面的,否则执行aName(注意??两边都有空格)

var aName: String? ="ningcol"

//var aName: String? = nil

let bName = aName ??"aNameIsNil"

10.区间运算

1.闭区间运算符( a...b )定义一个包含从 a 到 b (包括 a 和 b )的所有值的区间

2.半开区间( a..

for index in 1...5 {

print(index)

}

for index in 1..<5 {

print("半开区间:\(index)")

}

11.逻辑运算

1.逻辑非(!a):布尔值取反

2.逻辑与( a && b ):只有 a 和 b 的值都为 true 时,整个表达式的值才会是 true

3.逻辑或( a || b ):两个逻辑表达式的其中一个为 tru e ,整个表达式就为 true

let allowedEntry =false

let enteredDoorCode =true

if !allowedEntry {

print("ACCESS DENIED")

}

if allowedEntry && enteredDoorCode {

print("Welcome!")

}else{

print("ACCESS DENIED")

}

if allowedEntry || enteredDoorCode {

print("Welcome!")

}else{

print("ACCESS DENIED")

}

03-可选项

1.可选值

可选值:可以有值,可以为nil(用 ? 表示可选值)

// URL 为可选项

let URL = NSURL(string:"http://www.baidu.com/")

// str 为可选项

var str: String? ="ningcol"

// var 的可选项默认为 nil

var a:Int?

print(a)

2 if let 语句
// if let : 确保 myUrl 有值,才会进入分支

iflet myUrl = URL{

print(myUrl)

}

var aName: String? ="ningcol"

// var aName: String? = nil

var aAge: Int? =18

iflet name = aName,let age = aAge {

print(name + String(age))

}

// 可以对值进行修改

ifvar name = aName,let age = aAge {

name ="lisi"

print(name + String(age))

}

3.guard let

1.guard let 和 if let 相反。表示一定有值,没有就直接返回

2.降低分支层次结构

3.playground不能展示效果,要在函数中展示

// 创建一个类(详见:10-对象和类)

classtest{

func demo(){

let aNick: String? ="ningcol"

let aAge: Int? =10

guard let nick = aNick ,let age = aAgeelse{

print("nil")

return

}

print("guard let: "+ nick + String(age))

}

}

var t = test()

t.demo()

4.强制解包

// 创建一个数组(详见:08-组数)

var dataList:[String]?

dataList = ["zhangsan","lisi"]

/*********************************************************************

1.dataList? 表示 datalist 可能为 nil

2.如果为 nil, .count 不会报错,仍然返回 nil

2.如果不为 nil,.count执行,返回数组元素个数

4. ?? 空合运算符(详见:02-运算符)

*********************************************************************/

let count = dataList?.count ??0

// 表示 datalist 一定有值,否则会出错!

let cou = dataList!.count

04-条件语句

4.1.if语句

/*********************************************************************

1.必须要有大括号

2.没有"非零即真"的概念,只有ture/false

*********************************************************************/

let num =20

ifnum >10{

print("大于10");

}else{

print("小于或等于10")

}

4.2switch

/*********************************************************************

1.值可以是任何类型

2.作用域仅在 case 内部

3.不需要 break

4.每一个 case 都要有代码

*********************************************************************/

let name ="nick"

switchname {

case"nick":

let age =18

print("one\(age)")

case"fil":

print("two")

case"Davi":

print("three")

case"":break//相当于有一行代码

case"tom","ningcol":

print("tomAndNingcol")

default:

print("other")

}

switch分支使用范围

let count = 3_000

var naturalThings:String

switchcount{

case0:

naturalThings ="数字0"

case1...3:

naturalThings ="数字1-3"

case4...9:

naturalThings ="数字4-9"

case10...99:

naturalThings ="数字10-99"

case1000...9999:

naturalThings ="数字1000-9999"

default:

naturalThings ="数字9999以上"

}

print(naturalThings);

//输出:数字1000-9999

5.1 for循环

// 去掉了C语言风格的循环( ..< 区间运算符,详见:02-预算符)

foriin0..<10{

print(i)

}

print("----步长循环-----")

// 递增(步数为2)

foriinstride(from:0, to:12, by:2) {

print(i)

}

print("开始递减")

// 递减

foriinstride(from:12, to:0, by: -2) {

print(i)

}

print("----反序循环----")

let range =0...10

// 反序循环

foriinrange.reversed(){

print(i)

}

5.2循环结构while

/*

while语句,只有当 ip<5 为 false 才跳出 while语句

*/

varip = 0

while (ip<5){

print("ip=\(ip)")

ip += 1

}

//运行结果

//ip=0

//ip=1

//ip=2

//ip=3

//ip=4

/*

repeat-while 循环,不管pa是多少,先执行一次,在判断,为false 跳出 do while语句

*/

varpa = 5

repeat{

print("pa=\(pa)")

pa += 1

}while (pa<5)

//运行结果

//pa=5

06-字符串

1.String 结构体,效率比对象高,一般推荐使用,支持遍历

2.NSString 继承NSObject

var str:String ="Hello你好"

//var st:NSString = "hah"

// 字节数量

print(str.lengthOfBytes(using: .utf8))

// 字符串长度

print(str.characters.count)

forainstr.characters{

print(a)

}

// 字符串拼接

let name:String? ="老王"

let age =80

let location ="隔壁"

print(location + (name ??"a") + String(age) +"岁")

//'\(变量名)' 会自动转换拼接

print("\(location)\(name)\(age)岁")

let rect = CGRect(x:0, y:0, width:100, height:100)

print("\(rect)")

// 格式字符串

let h =13

let m =5

let s =9

let timeStr = String(format:"%02d:%02d:%02d", arguments: [h,m,s])

let timeStr1 = String(format:"%02d:%02d:%02d", h,m,s)

1.在Swift中使用 Range,最好把 String 改成 NSString

2.str.substring(with: Range) 很麻烦

3. '值 as 类型' 作为类型转换

(str as NSString).substring(with: NSMakeRange(2,5))

let index = str.index(str.startIndex, offsetBy:3)

str.substring(from: index)

// "123"只是用来取到索引位置

str.substring(from:"123".endIndex)

print("****\(str.substring(from: "123".endIndex))")

str.substring(to: index)

String 使用 Range

let myRange = str.startIndex..

str.substring(with: myRange)

let myRange1 = index..

str.substring(with: myRange1)

07-元组

// 元组的元素个数固定,不允许增加、删除

var stu = (404,"小白")

// 支持嵌套

var msg = ("基本信息", ("李刚",34))

print(stu)

print(msg)

var (a,b) = stu

print(a,b)

//如果仅需要元组中的个别的值,可以使用"_"的方式来处理不需要的值

let (c,_) = stu

print(c)

//通过序号获得元组的值

print("status is \(stu.0)")

// 可以修改

stu.0=500

let message = (status:100, msg:"哈哈")

print("message is \(message.status)and \(message.msg)")

08-数组

8.1 数组定义

使用let修饰的数组是不可变数组

使用var修饰的数组是可变数组

//方括号 [] 来创建数组

let array1 = ["zhangsan","lisi"]

let array2 = [1,2,3,4,5]

var array3:[Int]// 定义一个数组(没有初始化)

array3 = [Int]()//初始化

//声明空数组,(必须初始化)

let array4 = [String]()// 等价上面两行代码

let array5:[Any] = ["zhangsan","lisi",20]

var arr3 = [Double](repeating:0.0, count:3)//[0.0, 0.0, 0.0]

var arr4 = Array(repeating:3.0, count:3)//[3.0, 3.0, 3.0]

var arr: [String] = ["Alex","Brian","Dave"]

print(arr.count)

print(arr[0])

8.2数组遍历

// forin方式

for name in array1{

print(name)

}

// 遍历数组

for i in 0..

print(array2[i])

}

//区间遍历

for item in array2[0..<2] {

print("item\(item)")

}

// 同时遍历下标和内容

print("=====同时遍历下标和内容=====")

for e in array2.enumerated(){

print(e)

//offset 下标element 值

print("元组 \(e.offset) \(e.element)")

}

//下标和值同时遍历

for(n, s) in array2.enumerated() {

print(n,"===", s)

}

// 反序遍历

for a in array2.reversed(){

print(a)

}

// 遍历下标和数值 反序

for(xxx,ooo)in array2.enumerated().reversed() {

print(xxx,"==",ooo)

}

未完待续。。。

如果你坚持看到这里就可以走向知识的大门 哈哈!!!

http://www.cnblogs.com/ningmengcao-ios/p/5949790.html

上一篇下一篇

猜你喜欢

热点阅读