//: Playground - noun: a place where people can play

import Cocoa

var str = "Hello, playground"

//这里先提及下,

//Swift中的属性的定义

//属性名首字母只能是字母,下划线

//首字母后也只能是数字,字母,下划线

/****************************************常量与变量**/

/**************常量的定义*/

//语法上就是使用let关键字

//let 124t :Int

let a2_d:Int

let stuName: String

stuName = "张三"

//stuName = "Jason"

let stuName2 = "Tom"

//stuName2 = "Sky"

/*

特点:

1、常量,value值只可以指定一次

2、常量属性可以先定义,再赋值。需要注意的是,要想先定义,再赋值,那么在定义的时候,就必须给出属性的数据类型,后面就可再赋值,这是语法上的规范

3、常量可以在定义这个常量属性的同时给它附一个值

4、也可以在定义的时候指定这个常量属性的具体数据类型,同时赋值都可以

等等.....

*/

/**************变量的定义*/

//使用var关键字来进行变量的定义

//定义一个变量属性,不指定数据类型,在定义的同时赋初始值

var stuScore = 96

//在变量上,value值是一直可以改变的

stuScore = 66

stuScore = 36

//定义一个变量属性,同时指定具体数据类型,先定义,再赋值

var status: Bool

status = false

status = true

//定义一个变量属性,先定义,再赋值

//注意,这么去写语法上是错误的

/*

var facility

facility = "sdasd"

*/

/*

特点和注意项和常量是一样的

*/

/************************************** 元祖(tuple) ****/

/***************使用let关键字定义元祖****/

/*

语法:

let tupleName = (element1,element2,element3,...)

*/

//定义一个元祖,元祖中保存多个<!!数据类型一样!!>的元素

let score = (36,58,79,80)

//访问元祖score

//通过语法tupleName.intIndex

score.0

score.1

score.2

score.3

//定义一个元祖,元祖中保存多个<!!数据类型不一样!!>的元素

let nfitStu = ("张三",19,"男",true)

//访问元祖nfitStu

//通过语法tupleName.intIndex

nfitStu.0

nfitStu.1

//定义元祖不是定义常量

//以下代码语法上严重出错

/*

let lash: Int

lash = (1,2,3)

*/

//记住语法:

//      let/var tupleName = (element1,element2,...)

//定义一个元祖,元祖中的每个元素都起一个别名

let Tom = (name: "Tom", age :21, sex :"男")

//访问元祖Tom

//在定义元祖时,元祖的每个元素都起好别名

//通过语法tupleName.elementName

Tom.name

Tom.age

Tom.sex

//定义一个元祖,可以起别名,也可以不起别名

let Jason = ("Jason",age :15,sex :"男","爬山")

//访问元祖Jason

Jason.0

Jason.1

Jason.sex

Jason.3

//当元祖中有别名的元素,也有无别名的元素

//访问元祖元素时,即可通过元祖元素索引访问

//也可通过元祖元素别名来访问

//定义一个元祖,元祖中的元素并不是都起别名,而是指定元素的数据类型

let lisiStu = (String :"lisi",Int :21,String :"男")

//这种情况下,很容易就会被弄混

//因为元祖中的元素有2个String类型的

//在访问的时候,当访问到String类型时,

//就只会访问到第一个String类型的元素

//这种情况下,就只能通过元祖元素索引来访问第二个在元祖

//中String类型的元祖元素

lisiStu.String

lisiStu.Int

lisiStu.2

/***************使用var关键字定义元祖****/

var me = ("张三",19,"男")

me.0

//使用var关键字定义元祖

//元祖中的元素是可以一直被改变的

me.0 = "李四"

me.0

me.1

me.1 = 21

me.2 = "妖"

me.0 = "Tom"

me.0

/*          以上都是定义元祖的同时在元祖中给每个元组指定value值*/

//元祖先定义,在赋值

let Jack :(name :String,age :Int,sex :String) = ("jack",12,"魔")

/*

其他特点和let关键字是一样的

区别就只是

let关键字定义定义的元祖的元素value值只可以接受一次

var关键字定义的元祖的元素value之可以一直被改变

元祖定义语法

1> let/var tupleName = (element1,element2,element_N)

2> let/var tupleName = (type1Element, type2Element, N)

3> let/var tupleName = (elementName1: value, elementName2:value,..N)

4> let/var tupleName = (type1: value, type2: value,...N)

5> let/var tupleName: (type1,type2) = (type1Value, type2Value)

6> let/var tupleName: (elementName1 :type, elementName2 :type) = (elmentName1_value, elmentName2_value)

7> let/var tupleName: (type1,type2) = (elementName1: value, elementName2: value)

(语法7,由于在定义元祖时只指定了元素类型,后面赋值时才给定的元素别名,所以访问时也只能通过索引来访问)

(语法1> 2> 3> 4>可以混搭)

*/

/**************************** swift中的字符串 ******/

//语法上也是用let/var关键字

//let是常态属性,var是可变属性

/*********************** 定义属性的3种语法  */

//定义第一个字符串

//定义的同时赋值,但不指定具体数据类型

let str1 = "abcdefghij"

//定义第二个字符串

//定义的同时赋值,指定具体的数据类型

let str2 :String = "Hello World"

//定义第三个字符串

//先定义,再赋值

//注意,在定义该属性时就必须给出数据类型

let str3 :String

str3 = "张三"

//言归正传,回到String类型[字符串的练习]

//定义字符串str4

let str4 :String

str4 = "Hello"

//定义字符串str5

let str5 = " World!"

//在Swift中的字符串是可以拼接在一起的

//语法上使用 + 这个符号

//将str4和str5两个字符串拼接在一起

let str6 :String = str4+str5

//PS swift拼接字符串,不可以使用+=运算符将两个字符串属性拼接,这是错误语法

//使用 += 运算符来将字符串拼接在一起,该属性必须是可变的

//正确语法:

var str7 = "abc"

str7 += "def"

//回想一下,在JavaScript中,没有常量可言,定义的属性都是可变的

//也是使用var关键字来定义

//************************************ swift_String(字符串)中的常用方法

//定义字符串str8

var str8 :String

str8 = "abcdefg"

//获取str8字符串的长度

str8.characters.count

//str8[1]

//若要操作[访问]字符串

/*

注意,这里不是Java,也不是c#

*/

//这里是Swift,所以,以往学习的语言中,访问字符串的方式在这里就用不上了

//在Swift中访问String字符串,

//使用 startIndex[获取字符串的第一个字符的索引下标]

// 和 endIndex[获取字符串的最后一个字符的索引下标]

//配合方法 index[获取字符串中某个字符的索引下标]

//配合方法 subString 来截取字符串中的某一个字符片段

//************************************* 获取字符串字符下标索引

//定义str9字符串

let str9 = "abcdefghijklmnopq"

//获取str9字符串的长度

let str9Lenght :Int = str9.characters.count

//获取str9字符串的首字符的下标索引

let str9StartIndex = str9.startIndex

//获取str9字符串的末尾字符的下标索引

let str9EndIndex = str9.endIndex

//************************************* 截取字符串

//现有一要求,要获取出 fgh 这一个字符片段

//获取f字符所在下标位置

str9.index(str9StartIndex, offsetBy:5)

//获取h字符所在下标位置

str9.index(str9EndIndex, offsetBy: -14)

//调用subString方法来截取出str9字符串中的 fgh 这个字符片段

str9.substring(from :str9.index(str9StartIndex, offsetBy:5)).substring(to: str9.index(str9EndIndex, offsetBy: -14))

//************************************ 字符串大小写装换

//全大写

str9.uppercased()

let str10 :String

str10 = "ABCDEFG"

//全小写

str10.lowercased()

//首字母大写

str10.capitalized

//************************************ 判断是否存在

//是否有该前缀

str10.hasPrefix("AB")

str10.hasPrefix("ab")

//是否有该后缀

str10.hasSuffix("FG")

str10.hasSuffix("fg")

//是否包含

str10.contains("CE")

str10.contains("CD")

//*********************************** 嵌入

let i :Float

i = 5.5

i

let str11 = "abc \(i * 5)"

//在Java中,字符串的嵌入是使用 "+ +"

//swift中,则使用 \( )

//非常方便

//*********************************** 流程控制的练习

//用作判断条件的有

/*

1>

if(){

}else if(){

}else{

}

2>

switch(){

case_1:

case_2:

case_N:

...

default:

}

*/

//用作循环遍历的有

/*

1>

for[旧版本的语法:

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

i++

}

]

新版本新语法:

for in on...off{

}

2>

for-in {

}

3>

while{

}

4>

do-while[swift旧版本的语法]

新版本新语法:

repeat{

}while

*/

//***if - else if - else

//定义一个变量

let str12 = "abcdef"

//判断str12中是否包含cd

if (str12.contains("cd")){

print("str12中包含字符片段'cd'")

}else{

print("不包含")

}

//多层判断

if (str12.hasPrefix("cd")){

print("有这个前缀")

}else if(str12.hasSuffix("ef")){

print("有这个后缀")

}else if(str12.contains("ce")){

print("包含‘ce’这个字符片段")

}else{

print("结束")

}

/*

Swift中的多分支条件判断语句,

和Java中一样的,

只要有一个条件分支成立,

if - else if - else语句就结束了

*/

//********************* switch

//定义一个常量属性

let age = 35

/*

错误的语法:

switch age{

case 25:

print("ok")

case 16:

print("ok")

}

在swift中,

switch语句必须要有一个默认分支

*/

//正确语法

switch age{

case 25:

print("ok")

default:

print("没错,就是这个")

}

//*********************** for - in no...off

let arrs = [1,5,8,10,16,20,33]

var max = arrs[0]

for arr in 0...5 {

if arr % 2 != 0 && arr > max{

max = arr

}

}

//升序

var start = 0

for arr in arrs{

if arr > start {

start += arr

}

}

//*********************** for - in

//定义一个数组

let score2 = [90,20,33,67,89,46,70,80]

//循环遍历数组score2

for score in score2 {

print(score)

}

/*

swift中的for-in循环和Java中的for-each循环的用法是一样的

*/

//********************** while

/*

swift的while循环和Java中的while循环也是一样的,没有区别

同样是给一个条件

条件成立,则进入循环

反之,跳过

*/

var n = 3

while n<10 {

n+=1

print(n)

}

n=3

repeat{

print("XXX")

n+=1

}while n<10

/****************** 集合 Array Dictionary Set  *******************/

//************************************ Array类型的集合

let arr2 :Array<Int> = Array<Int>()

var arr3 = [1,2,3,4]

let arr4: Array<Int> = []

arr3[0]

//追加一个元素

arr3.append(5)

//往数组中追加一个数组段在数组的后面

arr3.append(contentsOf: [6,7,8])

arr3

arr3 += [10,11]

arr3.insert(contentsOf: [9,0,9], at: 2)

arr3.remove(at: 9)

arr3

//定义一个Array类型的集合

var arr5 :Array<String>

arr5 = ["张三","李四","王五","赵六"]

arr5.append(contentsOf: ["田七"])

arr5+=["郭八","周九"]

arr5.remove(at: 4)

arr5.remove(at: 3)

arr5.remove(at: 2)

arr5

//插入元素

arr5.insert(contentsOf: ["王五","赵六","田七"], at: 2)

/*

Swift中的这个Array的类型的集合类似Java中的List接口类型的集合

定义集合

操作集合

大致意思是一样的

语法上有些许差异

*/

//******************************************** Dictionary类型的集合

//定义一个Dictionary类型的集合

var dic :Dictionary = ["name":"张三","age":"21","sex":"男"]

dic["name"]

dic["age"]

dic["sex"]

/*

swift中的Dictionary类型的集合提供了两个常用的属性

Keys属性可以拿到Dictionary集合中的所有的键

Values属性可以拿到Dictionary集合中的所有的值

*/

//获取dic集合中的所有的键

for k in dic.keys{

print(k)

}

//获取dic集合中所有的value值

for v in dic.values{

print(v)

}

//循环遍历这个Dictionary集合dic

for (k,v) in dic{

print("Key is \(k), Value is \(v).")

}

/*

完毕

可以很清楚的看到,Swift中的Dictionary类型的集合类似Java中的Map集合

一个key 一个value

一个key 一个value

存数据,有集合,不用怕

Dictionary集合让你存数据方便

Dictionary这个了类型的集合就是键值对的来存取数据的

*/

//******************************************************** Set

//定义一个Set集合

var set1 :Set<String>

set1 = ["张三","李四","王五"]

//获取这个集合的长度

set1.count

//插入东西到一个Set集合中

set1.insert("赵六")

set1

//定义第二个Set集合

var set2 :Set<String>

set2 = ["田七","郭八","周九"]

/*

将第二个Set集合插入到第一个Set集合中

调用两个方法

intersection方法可以理解成为是一个一个缓冲区

所以调用这个方法的时候,数据并没有真正的到第一个Set集合中

而调用union方法时,数据才会真正的到第一个Set集合中

*/

print("预备")

set1.intersection(set2)

//在这之间,可以做些其他的事情

print("数据在缓冲区中")

set1.union(set2)

print("数据已在集合中")

swift_简单值 | 元祖 | 流程控制 | 字符串 | 集合的更多相关文章

  1. python基础知识之列表、元祖、字典、集合、字符串。

    1.可变类型之列表 列表用 [ ]来定义是可变的,可以通过索引值来去查询里面的字段可以可以追加,删除等 names='zhangyang guyun xiangpeng xuliangwei' nam ...

  2. 干货!Python中字符串、列表、元祖、字典,集合之间的转换

    一.字符串的转化 1.字符串转换成列表 字符串转换成list 的时候,str可以作为迭代对象,直接放入:也可以使用split对字符串进行切割.然后返回list s = '1a1b1c' print(l ...

  3. py基础2--列表,元祖,字典,集合,文件

    本节内容 列表.元祖操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换 1. 列表操作 ...

  4. python基础--列表、元祖、字典、集合

    列表(List) 1.列表特点 列表是可变的!! list 是一种有序的序列,可以添加.删除其中的元素,并且可以通过下标(索引)访问 数据 2.简单的常用操作 A.通过下表访问元素 print(lis ...

  5. 老齐python-基础4(元祖、字典、集合)

    1.元祖 元祖的特性结合了字符串和列表 元祖是用圆括号括起来的,其中的元素之间用逗号(英文半角)隔开.元祖中的元素是任意类型的python对象(包括以后自定义的对象) 元祖中的元素不可更改,所以修改列 ...

  6. 【python基础语法】元祖、字典、集合、数据类型的分类(第4天课堂笔记)

    """ 列表:可变数据类型,对列表内部的元素可以进行修改 元祖: tuple,不可变数据类型,是不可以进行增删查改 元祖的方法: count 查找元素的数量 index ...

  7. shell编程值之shell流程控制(7)

    条件判断式 1 按照文件类型判断(常用类型) 测试类型 作用 -d 文件 判断该文件是否存在,并且是否为目录文件(是目录文件为真) -e 文件 判断该文件是否存在(存在为真) -f 文件 判断该文件是 ...

  8. go经典练习题涉及流程控制-字符串-struct-map的数据类型的处理

    one:求1到100之间的质数 package main import ( "fmt" ) func isPrime(n int) bool { var flag = true f ...

  9. Python——列表、元祖、字典、集合的基本操作

    列表 1. 列表——增 (1)append li = ['xcsd', 'cdc', [1, 5, 2], 'eht', '辛辰'] li.append('nihao') print(li) #['x ...

随机推荐

  1. Wireshark工控协议

    Wireshark是一个强大开源流量与协议分析工具,除了传统网络协议解码外,还支持众多主流和标准工控协议的分析与解码. 序号 协议类型 源码下载 简介 1 Siemens S7 https://git ...

  2. EditPlus 3.8.1346 中文版(6月16日更新)

    新的版本增加了粘贴时自动调整行首缩进的功能(“编辑”菜单→剪贴板→粘贴时自动缩进),非常方便.建议各位马上更新.

  3. ResultSet用法集锦

    ResultSet用法集锦 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数 ...

  4. 用Paint Tool SAI绘制漫画

    漫画绘图软件 Paint Tool SAI是一个来自日本的小巧的漫画辅助绘图软件,只有11M大小. 这个没有任何现成的模板和组件,只能自己一笔一笔的话,画笔.图层等功能与Photoshop类似,但没有 ...

  5. 日常总结——JSP篇(补)

    序—— 初次接触JSP,写一个登录注册界面 正文—— JSP介绍:JSP通过在标准的HTML页面中插入java代码,其静态的部分无须java程序控制.每个JSP页面就是一个servlet实例, WEB ...

  6. python学习笔记之基础二(第二天)

    1.编码转换介绍        unicode是最底层.最纯的,会根据终端的编码进行转化展示 一般硬盘存储或传输为utf-8(因为省空间.省带宽),读入内存中为unicode,二者如何转换 a = ' ...

  7. dataGridViewX和数据库的链接之dataGridViewX1.DataSource = ds.Tables[0];

    dataGridViewX1.DataSource = ds.Tables[0]; 1, dataGridViewX和数据库链接,如果我们用 dataGridViewX1.DataSource = d ...

  8. 菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

  9. 如何在R语言中使用Logistic回归模型

    在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价.身高.GDP.学生成绩等,发现这些被预测的变量都属于连续型变量.然而有些情况下,被预测变量可能是二元变量,即成功或失败.流失或 ...

  10. linux的三种安装软件包的方式(小白的学习之旅)

    tar包,整个安装过程可以分为以下几步: 1) 取得应用软件:通过下载.购买光盘的方法获得: 2) 解压缩文件:一般tar包,都会再做一次压缩,如gzip.bz2等,所以你需要先解压.如果是最常见的g ...