swift学习笔记->基础类型

时间:2022-01-05 15:42:20

今天开始我们来学习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

值得一提的是  你可以通过元祖的下标或别名访问并修改它的值,但不能修改类型