swift学习笔记->基础类型
今天开始我们来学习swift
学习任何一门语言都是从基础类型开始学起,废话不多说,来看看swift的基础类型
整形:int
浮点型:float double
字符型:string(字符串) Character(字符)
布尔类型:Boolean
集合类型:array(数组) dictionary(字典) tuple(元祖)
基本的类型与别的语言没什么区别 我们来看看一些不一样的
String,java语言有 但C语言是没有的,下面看看String类型的操作
var str : String //声明一个空的字符串变量str var str1: String = String()//声明并实例化str1 var str2: String = "abc"//声明字符串str2并赋值abc var str3 = "abc"//声明字符串str2并赋值abc
这里说明一下,var声明的都是变量,而 let 则是声明常量 语法一样
或许有人会很奇怪 str3并没有声明类型 为什么不出错, 因为swift有个类型推断 会根据你声明时等号右边的值推断出变量的类型
再来看看字符串的操作
var str = "hello" str.characters.count//字符串长度 str.startIndex//返回字符串开始下标 str.endIndex//返回字符串结束下标 str[str.startIndex]//输出第一个字符h str.startIndex.successor()//返回开始下标的下一个下标 str.endIndex.predecessor()//返回结束下标的上一个下标 str.startIndex.advancedBy(2)//返回开始下标+2的下标(参数可为负数 同理) //字符串截取"llo",从给定下标开始向后截取 str.substringFromIndex(str.startIndex.advancedBy(2)) //字符串截取"he" 从给定下标开始向前截取 str.substringToIndex(str.startIndex.advancedBy(2)) //还可以进行范围截取 定义一个范围 ran(这里用到Range传入两个参数分别是范围开始和结束) var ran = Range(start: str.startIndex.successor(), end: str.startIndex.advancedBy(3)) str.substringWithRange(ran) str.hasPrefix("he")//判断字符串是否以"he"开头 str.hasSuffix("ld")//判断字符串是否以"lo"结束 //插入字符操作 (第一个参数是要插入的字符,第一个是要插入的下标位置) str.insert("a", atIndex: str.startIndex) //插入字符串操作 (同上) str.insertContentsOf("abc", at: str.startIndex)
可以看到 所有方法所需要的下标都不是int数字,因为字符串类型中是可以插入表情的,表情在内存中所占字节并不确定,所以用int类型下标访问会造成错误
swift字符串有自己独有的下标 需要调用方法来返回
另外其他类型转换成字符串有个简单的插值法 不像java语言可以直接用+号连接
var str = "hello" let i = 6 var str2 = "hello \(i)" //插值法
再来看看以前没见过的:dictionary(字典)
var dic : Dictionary<String,String> = ["a":"c","b":"d"]//实例化并赋值一个字典 var dic1 : Dictionary<String,String> //声明一个字典但不实例化 var dic2 = Dictionary<String,String>() //实例化一个空字典 //如你所见 字典实际上是一个个键值对(key,value)和java的json对象类似 dic.count//字典的长度 dic["a"] = "s"//可使用字典的key作为下标修改对应的value dic.updateValue("s", forKey: "c")//调用修改方法修改key对应的value for (index,value) in dic { print(index,":",value) }//循环迭代输出字典 dic.values //字典的value集合 dic.keys//字典的key集合
大致上代码都能看得懂了,这里有个for in javascript中是有这个迭代语法的 java中的for each同理
swift语言号召着精简 所以for循环条件的小括号简化了 以后的控制流程语句(if,swith。。。)都将省略小括号
最后来看元祖 元祖是可重复不同类型数据的集合
var tuple = ("张三" ,22, true , 1.76)//定义并赋值一个元祖 tuple.0 //访问元祖第一个对象 var tuple1 = (name:"张三" ,age:22,jude:true ,heiget:1.76)//定义并赋值一个元祖 tuple1.name var (name,age,jude,height)=tuple //所有对象进行赋值 name age jude height
值得一提的是 你可以通过元祖的下标或别名访问并修改它的值,但不能修改类型