Swift4 学习

1.常量与变量

let name = "小明"//定义一个名字叫小明的常量
var hisAge = 8//使用var关键字来定义一个hisAge的变量
swift是不用后面加 ; 的,与oc不同,定义的时候也可以不指定类型(当然也可以指定类型,具体实现稍后再写)。swift并不是不是一门强类型的语言,而是依附着强大的类型推测功能。
//这个是标注类型的
var name :String = "小明"

2.注释

//单行注释格式
/*
块注释格式
*/

3.输出print

print("那是小明!")
print("1","2","3")```
###### 上面两个会输出 我是小明! ,还有 1,2,3
```swift
print(items: Any..., separator: String, terminator: String)
上面这个是一个重载的print方法,可以对items里的参数指定分隔符和终止符,比如:
print("a","b","c",separator:"*",terminator:"end")```
###### 打印结果是a\*b\*cend 。
```swift
let name = "小明" 
print("那是\(name)")
打印结果是 那是小明。

4.基本数据类型

元组类型
元组是Swift中一个非常好用的数据类型,它可以把多个值的成员复合成一个值,这些成员的数据类型可以不同。格式是把成员值放到一个括号里,以括号分隔。
let message = {"小明",9,"三年二班"} 

也可以这样写,给每个成员变量命名:

let message = {name:"小明",age:9,grade:"三年二班"}
let showName = message.name
let showAge = message.age
let showGrade = message.grade

当我们只需要其中一个或两个值得时候这样赋值,只保留第二项,其他都省略:

let message = (name :"小明",age :9,grade:"三年二班")
let (_,showAge,_) = message
print("Name is \(showAge)")

5.可选型

var age :Int?
age = Int("12")//结果age = 12
age = Int("小明")//age = nil
这个例子告诉我们可选性如果没有值则返回一个nil的值,否则返回一个Int的值。

6.运算符

?? 运算符:它的之前是可选型,之后为非可选型。“??”操作符自带解包功能,在赋值时“??”会检查其之前的可选型;如果可选型不为nil则返回可选型的值;如果其值为nil,则不会返回nil而去返回“??”之后的非可选型的值。

7.数值运算

  • 三元运算符
判断条件?为真时的操作:为假时的操作。
var 身高 =180
var 名字 = 身高<160 ?"小明":"小刚"
//结果为小刚
  • 范围
    在oc中我们使用的是range来指示一个起始位置和长度,而Swift中更加方便一些。
  • 1...5表示闭区间[1,5],也就是从1到5的范围。
  • 1..<5表示半闭区间[1,5),也就是从1到4。

8.字符串

  • 想要获得String中某个字素的时候。
var str = "Hello"
str[str.index(str.startIndex, offsetBy:3)]
//下标取值并不能保证安全,所以有了下面的这个方法
str[str.index(str.startIndex,offsetBy:6,limitedBy:str.endIndex)!]//如果指定的下标越界就会立刻抛出错误
  • 截取字符串
var str = "hello"
let start = str.index(str.startIndex, offsetBy:1)
let end = str.index(str.startIndex, offsetBy:3)
str(start...end)
  • String与NSString之间的传值需要遵循严格的类型转化:
var s1:NSString = "NSStr"
var s2:String =String(s1)
var s3:String = "Str"
var s4:NSString = s3 as NSString//转类型
  • Swift3.0 返回可选类型的范围,我们用这个方法获得浮点数的整数部分:
let num = "123.45"
let deRange = num.range(of:".")//该方法返回的是可选型
let wholeNumber  = num[num.startIndex .. < deRange!.lowerBound]
  • 替换或删除字符串的某部分:
var str = "Hello"
let start = str.index(str.startIndex,offsetBy:1)
let end = str.index(str.startIndex,offsetBy:3)
str.removeSubrange(start...end)//结果是Ho
  • 删除字符串里的单个字素
var str ="Hello"
let start = str.index(str.startIndex,offsetBy:1)
str.remove(at:start)
print(str)
  • 替换字符串
var str = "Hello"
let start = str.index(str.startIndex,offsetBy:1)
let end = str.index(str.startIndex, offsetBy:3)
str.replaceSubrange(start...end,with:"new")//结果是Hnewo

9.集合类型

  • 数组
    创建一个数组的实例:
    第一种方式:
var a = Array()//得到一个字符串类型的空数组

这是一种泛型结构体式的初始化方法。
第二种初始化方法:

var a = [String]()

官方比较推荐第二种方式。

  • 数组添加元素的时候,只要数组类型相同,就可以把一个数组中的元素加入到另一个数组中。
1.exampleOfArray +=["AD钙奶"]
2.exampleOfArray.append("AD钙奶")
  • 替换数组中的元素
1.var arrayItem = exampleOfArray[0]
exampleOfArray[1] ="软炸里脊"
  • 还可以使用范围来获取或者替换数组中的多个元素,替换的元素和原有的元素个数可以不同:
exampleOfArray[1...2] = ["AD钙奶"]

如果想把新元素插入到指定位置,则可以使用方法insert:

exampleOfArray.insert("AD钙奶",at:3)

删除数组最后的一个元素:

exampleOfArray.removeLast()
//删除指定位置的元素:
exampleOfArray.remove(at :0)
  • 集合
    集合和数组非常相似,区别是集合中不会有重复的元素,并且集合中的成员是无序的。
//数组转化成集合
var exampleOfArray = ["糖醋里脊","宫保鸡丁","水煮鱼","鱼香肉丝","大盘鸡","大盘鸡"]
var exampleOfSet = Set(exampleOfArray)

把变量声明为集合

//即使里面有重复的元素,声明完成后也不会有重复的了
var exampleOfSet:Set =["糖醋里脊","宫保鸡丁","水煮鱼","鱼香肉丝","大盘鸡","大盘鸡"] 

添加和删除元素方法:

exampleOfSet.insert("AD钙奶")//新增一个元素
exampleOfSet.remove("AD钙奶")//删除一个元素,如果集合里没有该元素,则返回nil
  • 字典
    字典的创建:
var exampleOfDictionary =Dictionary()

等同于:

var exampleOfDictionary = [String:Int]()

添加新值,用updateValue方法会返回修改前的值;如果修改前的值不存在于字典中,则会新增这个键值对,同时返回nil。

var exampleOfDictionary = ["年龄":25,"身高":175]
let oldValue = exampleOfDictionary.updateValue(20, forKey:"年龄")

当要移除键值时只需要把这个值赋nil就可以了。

10.控制流

  • while循环:分为先执行代码再判断条件的repeat-while循环结构,还有先判断条件再执行循环的while循环。
var index1 =5
var index2 =5
while index1 >5{
//不符合循环条件
index1 -=1
print(index1)//不会执行
}
repeat{
index2 -=1
print(index2)//输出4
}while index2 >5//不符合循环条件,跳出循环。
  • guard判断语句
    guard-else是先处理不符合guard中判断条件的情况,最后处理条件为真的操作。每个guard-else体都不会fall through(即某个case执行完毕后不会自动执行下一个case),所以我们需要使用return和break。
  • switch
    Swift中case里面不用加break。

11.反射

1.反射(Reflection)
对于C#、Java开发人员来说,肯定都对反射这个概念相当熟悉。反射就是可以动态获取类型、成员信息,同时在运行时(而非编译时)可以动态调用任意方法、属性等行为的特性。
Swift的反射机制是基于一个叫Mirror的struct来实现的,其内部有如下属性和方法:

let children:Children//对象的子节点
displayStyle:Mirror.DisplayStyle?//对象的展示风格
let subjectType: Any.Type//对象的类型
func superclassMirror() -> Mirror?//对象父类的mirror

12.?? 空合运算符

1.x ?? y ,判断x是否为nil,如果为nil则取y的值,否则则把x解包并返回。

13.public func truncatingRemainder(dividingBy other: Self) -> Self

1.对浮点数进行取余

14.元组(基本数据类型)

1.元组是一个非常好用的数据类型,它可以把多个值成员复合成一个值,并且这些成员的数据类型可以不同;把成员值放到一个括号中,以逗号分隔。

未完待续

你可能感兴趣的:(Swift4 学习)