swift基础学习Demo汇总

篇幅比较长!!!如果真心想学习,还是找个安静的晚上,慢慢阅读,慢慢体会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

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

推荐阅读更多精彩内容