1.常量和变量
let:修饰常量;
var:修饰变量;
-
注:
在开发中一般优先使用常量let修饰,只有在需要修改时,再把let改为var(这样做可以使得数据更加安全)
let pi : Double = 3.14
var age : Int = 20
- 附:
常量的意思是:指向的对象指针不可修改,但是可以通过指针拿到对象,然后修改内部属性。
2.类型推导和基本运算
2.1类型推导
释义:如果一个标识符在定义时有直接复制,那么可以根据后面赋值的类型,来推导前面标识符的类型,这样可以不用声明数据类型。(注:可以通过option+鼠标左键,来查看标识符的类型)
var a = 20
var b = 3.14
2.2基本运算
注:在swift中进行运算,必须保证类型时一致的,因为Swift中没有隐式运算。
var a = 20
var b = 3.14
//将Double类型转化成Int类型
let c = Int(b) + a
//将Int类型转化成Double类型
var d = Double(a) + b
3.if、三目运算符、和guard的使用
3.1 if的使用
注:if 判断条件可以不用加();但判断句结果必须是一个真假值
let a = 20
//let flag = a < 10
//示例1
if a > 10{
print("a大于10")
}else{
print("a小于10")
}
//示例二
let score = 87
if score < 60{
print("不及格")
}else if score < 70{
print("及格")
}else if score < 90{
print("良好")
}else if score <= 100{
print("优秀")
}else{
print("其他")
}
3.2 三目运算符
let age = 20
let result = age >= 18 ?"可以上网" : "不可以上网"
print(result)
//如果条件为真打印:可以上网;如果条件为假打印:不可以上网
3.3 guard的使用
guard age >= 18 else
{
//如果判断句为假,会执行else里边的语句
print("不能上网")
return false
}
//如果为真,继续执行
print("可以上网")
return true
4.Switch的使用
总结:
- 有case穿透,可以在语句后加fallthrough
//示例1:简单使用
let sex = 0
switch sex{
case 0:
print("男")
case 1:
print("女")
default:
print("其他")
}
//示例2:有case穿透时,可以在语句后加**fallthrough**
switch sex{
case 0:
print("boy")
fallthrough
case 1:
print("girl")
default:
print("other")
}
//示例3:case中可以通过“,”分割来实现判断多个条件
switch sex{
case 0,1:
print("human")
default:
print("other")
}
//示例4:判断浮点型数据
let a = 3.14
switch a{
case 3.14:
print("pi")
default:
print("other")
}
//示例5:判断字符串
let m = 20
let n = 2
let operation = ""
var result : Int
switch operation{
case "+"
result = m + n
case "-"
result = m - n
case "*"
result = m * n
case "/"
result = m / n
default:
print("非法输入")
}
//示例6:判断区间
let score = 80
switch score{
case 0..<60:
print("不及格")
case 60..<70:
print("及格")
case 70..<90
print("良好")
case 90..<100:
print("优秀")
default:
print("不合理的分数")
}
5.for、while、doWhile的使用
5.1 for循环
//写法一:常规写法
for var i = 0; i < 10; i++
{
print(i)
}
//写法二:区间for循环
for i in 0...10
{
print(i)
}
//写法三:如果for循环中没有用到"i"可以用"_"代替
for _ in 0..<10
{
print("hello world")
}
5.2 **while循环**
>注:条件不需要写()
判断条件必须有真假值(Bool)
var a = 10
while a < 20
{
a++
print("111")
}
5.3 **doWhile 循环**
>注:doWhile循环在swift 中,do需要换成“repeat”代替
repeat
{
a++
print("222")
}while a < 30
####6. 字符串Stirng的相关操作
/************1. Stirng的遍历****************/
//关键属性:str.characters
let str = "Hello Swift"
for s in str.characters{
print(s)
}
/************2. String 的拼接****************/
//1.两个字符串之间的拼接
let str1 = "Hello "
var str2 = "Swift"
str2 = str1 + str2
//2. 字符串和其他类型的变量常量的拼接
//格式:(变量/常量名)
let age = 19
let height = 1.34
let str3 = "age is (age), height is (height)"
//3. 字符串的格式化
//关键方法:String(format: ,arguments:)
let min = 2
let second = 32
let time = String(format:"%02d:%02d",arguments:[min,second])
/***************3. String的截取***************/
//提示:不要使用string方法截取.index因为非常不好截取
let urlString = "www.520it.com"
//string 转成NSString,只需要在String后面跟上:as NSString
//从其实位置截取index个长度
let prefixString = (urlString as NSString).substringToIndex(3)
//从location位置开始截取length个字符
let middelString = (urlString as NSString).substringWithRange(NSRange(location: 4, length: 5))
//从某位置截取到结尾
let subfixString = (urlString as NSString).substringFromIndex(10)
####7.数组的初始化
>注:
- 可变数组:var修饰
- 不可变数组:let修饰
/***********不可变数组*************/
//定义写法一:
let names : Array<String> = ["why", "what", "when", "how"]
//取出数组中的元素
names[1]
//定义写法二:常用
let names : [String] = ["lch", "zjq", "fhq"]
//定义写法三:类型推导
let names2 = ["why", "hh", "asdf"]
//可变数组:
//定义写法一:
var names3:[String] = ["why", "yz"]
//添加元素
names3.append("lch")
//定义写法二:
var names4 : [String] = String
names4.append("whld")
####8. 数组的相关操作
```//定义可变数组
//Swift 开发中,可以使用AnyObject代替NSObject
var names : [AnyObject] = [AnyObject]()
/********************1. 对数组的基本操作**********************/
//1. 添加元素
names.append("why")
names.append("Imsa")
names.append(14)
names.append(3.283)
names.append("why")
names.append(14)
names.append(3.214)
//2. 删除元素
names.removeLast()
names.removeFirst()
names.removeAtIndex(0)
names
//3. 修改元素
names[0] = "sd"
names
//4. 取出数组中的值
names[0]
//2. 数组的遍历
//1. 通过下标值遍历
for i in 0..<names.count{
print(names[i])
}
//2.forIn方式
for item in names{
print(item)
}
//3. 区间遍历
for i in 0..<2{
print(names[i])
}
for item in names[1..<3]{
print(item)
}
//数组的合并
//1. 类型相同数组的合并
let array1 = ["why", "sdfaew", 20]
let array2 = ["sdf", "dds", 8]
let array3 = array1 + array2
//2. 类型不同的数组的合并
let age1 = [18, 10, 35]
let names2 = ["sde", "ed", "aed"]
var array4 : [AnyObject] = [AnyObject]()
9. 字典的初始化
/*************1. 不可变字典****************/
//1. 方式一:
let dict1 : Dictionary<String, AnyObject> = ["name" : "hh", "age" : 123]
//2. 方式二:常用
let dict2 : [String : AnyObject] = ["name" : "wef", "age" : 21]
//3.方式三
let dict3 : ["name" : "sad", "age" : 23]
/**************2.可变字典******************/
//方式一:
var dict4 = Dictionary<String, AnyObject>()
//方式二:
var dict5 = [String : AnyObject]()
//方式三:
var dict6 = ["name" : "fdgc", "age" : 09]
10. 字典的操作
10.1 字典基本操作
//1. 添加元素
dict["name"] = "sld"
dict["age"] = 32
dict["height"] = 1.32
dict["weight"] = 76
//2. 删除元素
dict.removeValueForKey("age")
dict.removeAll()
//3. 修改元素
dict["name"] = "lch"
dict
//4. 取出元素
dict["name"]
//1. 遍历字典的键
for key in dict.keys {
print(key)
}
//2. 遍历字典的值
for value in dict.values {
print(value)
}
//3. 遍历字典的键值对
for (key, value) in dict {
print(key)
print(value)
}
//字典的合并
//注意:字典无论类型是否一致,都不能通过直接直接相加来合并
let dict1 = ["name" : "sdl"]
var dict2 : [String : AnyObject] = ["age" : 23]
for (key, value) in dict {
dict2[key] = value
}
11. 元组的使用
/**************定义元组****************/
//方式一:
let a = ("why", 24, 1.35)
//方式二:
let b = (name : "sldh", age : 34)
//方式三:
let(name, age) = ("sd", 98)
/************元组的使用************/
let error = (404, "Not Found")
error.0
error.1
let error1 = (errorCode : 404, errorInfo : "Not Found")
error1.errorCode
error1.errorInfo
let (errorCode1, errorInfo1) = (404, "Not Found")
errorCode1
errorInfo1
12. 可选类型
注:如果一个可选类型中没有值,强制解包会报错,所以在强制解包前最好先进行判断是否有值,如果有值再进行解包
//定义方式一:
var name : Optional<String>
//给可选类型赋值
name = "wld"
//取值: 可选类型名+!;表示强制解包
print(name!)
//拼接
let info = "my name is" + name!
//定义方式二:String?
//let phoneNum : Optional<String>
var phoneNum : String? = nil
phoneNum = "+86110"
gurard phoneNum else {
print("该值为空")
return false
}
let phoneInfo = "my phoneNum is " + phoneNum!
13.throw的三种方式
- try?
如果解析成功有值,否则返回nil
guard let result: [String: Any] = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
else {
return
}
- try!
如果解析成功有值,否则崩溃
let result: [String: Any] = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
- do{}catch{}
处理异常,能够接受到错误,并且输出错误,语法结构较复杂
do {
let result: [String: Any] = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
print(result)
} catch {
print(error)
}
14闭包
//声明格式
var name: ((参数) -> (返回值))= {代码}
//实现格式
代码
} ```
**示例**
//声明一个闭包
var callBack: (() -> ())? = nil
//闭包作为函数参数
class func requestData(urlString:String, successBack: (Any)->(), errorBack: @escaping(Any)->()) {
//代码
}
//实现闭包
_ = HttpTool.requestData(urlString: url, successBack: { (resultData) in
CHLog(message: resultData)
}, errorBack: { (error) in
CHLog(message: error)
})
网友评论