//: 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. FilterControl 显示时间并精确到时分秒的方法

  2. Thinkphp更改子集

    //规格编辑 public function standard(){ //$id = $_GET['id'];//dump($id);die; $id = 388; //根据$id 到re_goods ...

  3. Logstash学习-配置语法

    区段(section) Logstash 用{}来定义区域.区域内可以包括插件区域定义,你可以在一个区域定义多个插件,插件区域内则可以定义键值对设置. 数据类型 Logstash支持少量的数据值类型: ...

  4. android应用刷新系统多媒体库(增加or删除多媒体文件)

    系统:android4.4及其以上 功能:app中拍照, 并实现浏览.删除照片操作. 实现: 1.拍照,存储到指定路径path 2.通知系统多媒体数据库刷新数据. 主要使用MediaScannerCo ...

  5. Java SE 简介 & 环境变量的配置

    Java SE 简介 & 环境变量的配置 一.Java 技术的三个方向 Java 技术分为三个方向 javaSE( Java Platform Standard Edition 标准版)用来开 ...

  6. 利用wangEditor获取文章格式和内容

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  7. App瘦身

    http://www.zoomfeng.com/blog/ipa-size-thin.html https://github.com/ming1016/SMCheckProject

  8. dubbo配置文件报错解决方案

    下载dubbo.xsd 文件 在eclipse->window->perferences->XML Catalog->Add ->File system->选择刚才 ...

  9. javascript回文和类名的检测方法

    回文**           //"123"变为"123321" //"abc321"变为"abcd321123cba" ...

  10. set集合(set是一个无序且不重复的元素集合)

    功能: 一.可以去掉列表,元组中的重复项 二.可以求交集,合集,差集等 def add(self, *args, **kwargs): """ 添加 "&quo ...