iOS-Swift基础语法
2018-06-29 本文已影响0人
长衣貌
1./初体验
//: Playground - noun: a place where people can play
// 1.导入框架
//#import <UIKit/UIKit.h>
import UIKit
// 2.定义一个标识符
// int a = 10;
// swift中定义标识符:必须制定该标识符是一个常量还是一个变量
// var(变量)/let(常量) 标识符的名称 : 标识符的类型 = 初始化值
var a : Int = 10;
let b : Double = 3.14;
a = 29;
// b = 3.11 错误写法
// 3.语句结束后可以不跟;
// 前提:一行只有一条语句,如果一行中有多条语句,则需要使用;分割
var m : Int = 20
let n : Double = 3.44
// 4.打印内容
// NSLog(@"%d", a)
print(a)
print("hello world")
2./常量和变量的使用注意
//: Playground - noun: a place where people can play
import UIKit
// 1.在开发中优先使用常量,只有在需要修改时,在修改成var
// 2.常量本质:保存的内存地址不可以修改,但是可以通过内存地址拿到对象,之后修改对象内部的属性
//UIView *0x100 = UIView alloc] init];
//view = UIView alloc] init];
//view.backgroundColor = uiCOlor redColor];
let view : UIView = UIView()
// view = UIView() 错误写法
view.backgroundColor = UIColor.redColor()
3./创建对象
//: Playground - noun: a place where people can play
import UIKit
// 1.创建UIView对象并且制定frame
let view : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
// 2.设置UIView的属性
view.backgroundColor = UIColor.blueColor()
// 3.给view对象内部添加子控件
// 3.1.创建子控件
// swift中使用枚举: 1.枚举的类型.具体的类型 2. .具体的类型
let btn : UIButton = UIButton(type: .ContactAdd)
// 3.2.设置btn的位置
btn.center = CGPoint(x: 50, y: 50)
// 3.3.将子控件添加到View中
view.addSubview(btn)
4./数据类型
//: Playground - noun: a place where people can play
import UIKit
// 类型推导
// var a : Int = 30
var a = 30
// 可以通过:option + 鼠标左键,查看一个标识符的类型
let b = 3.14
5./基本运算
//: Playground - noun: a place where people can play
import UIKit
let m = 32
let n = 3.14
// Swift中没有隐式转化,不会将整形自动转成浮点型
// let result = m + n 错误写法
// 将整型转成浮点型
let result = Double(m) + n
// 将浮点型转成整型
let result1 = m + Int(n)
6./逻辑分支(if - else if - 三目)
//: Playground - noun: a place where people can play
import UIKit
// 1.if的使用
// 1> if后面的()可以省略
// 2> 判断句不再有非0即真.必须有明确的Bool值:true/false
let a = 10
if a != 0 {
print("a不等于0")
} else {
print("a等于0")
}
// 2.if elseif的使用
let score = 88
if score < 0 || score > 100 {
print("没有意义的分数")
} else if score < 60 {
print("不及格")
} else if score < 80 {
print("及格")
} else if score < 90 {
print("良好")
} else if score <= 100 {
print("优秀")
}
// 3.三目运算符
let m = 40
let n = 30
var result = 0
//if m > n {
// result = m
//} else {
// result = n
//}
result = m > n ? m : n
print(result)
7./逻辑分支(guard)
//: Playground - noun: a place where people can play
import UIKit
// 1.guard必须用在函数
let age = 20
//func online(age : Int) {
// if age >= 18 {
// if 带了身份证 {
// if 带了钱 {
// print("可以上网")
// } else {
// print("不可以上网,回家拿钱")
// }
// } else {
// print("不可以上网,回家拿身份证")
// }
// } else {
// print("不可用上网,回家去吧")
// }
//}
func online(age : Int) {
// 如果条件成立,者会执行后面的代码块
// 如果条件不成立,则会执行{}中的语句,并且{}中必须跟上
guard age >= 18 else {
print("未成年不能上网")
return
}
guard 带了身份证 else {
print("不可以上网,回家拿身份证")
return
}
guard 带了钱 else {
print("回家拿钱")
return
}
print("留下来上网")
}
8./逻辑分支(switch)
//: Playground - noun: a place where people can play
import UIKit
// 1.基本用法
let sex = 0
// 0:男 1:女 其他:其他
// 1> switch可以不跟() 2> case语句结束后可以不跟break,默认系统会加
switch sex {
case 0:
print("男")
// fallthrough
case 1:
print("女")
default:
print("其他")
}
// 2.基本用法的补充:
// 1>如果希望一个case中出现case穿透,那么可以在case语句结束后跟上fallthrough
// 2>case后面可以跟多个条件,多个条件以,分割
switch sex {
case 0, 1:
print("正常人")
default:
print("其他")
}
// 3.switch可以判断浮点型
let a : Double = 3.14
//if a == 3.14 {
// print("π")
//} else {
// print("非π")
//}
switch a {
case 3.14:
print("π")
default:
print("非π")
}
// 4.switch可以判断字符串
let m = 20
let n = 30
let opration = "+"
var result = 0
switch opration {
case "+":
result = m + n
case "-":
result = m - n
case "*":
result = m * n
case "/":
result = m / n
default:
print("非法操作符")
}
// 5.switch可以判断区间
let score = 93
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("及格")
case 80..<90:
print("良好")
case 90...100:
print("不错噢")
default:
print("不合理的分数")
}
9./循环(for)
//: Playground - noun: a place where people can play
import UIKit
// 1.普通的for循环
//for (int a = 0; i < 10; i++) {
//}
// ()可以省略
for var i = 0; i < 10; i++ {
print(i)
}
// 2.forin写法:区间遍历
for i in 0..<10 {
print(i)
}
// 3.forin写法:但是不需要用到下标值
// 如果不需要用到下标值,可以使用_来代替
for _ in 0..<10 {
print("hello world")
}
10./循环(while - do while)
//: Playground - noun: a place where people can play
import UIKit
// 1.while循环
// 1> while后面的()可以省略 2>没有非0(nil)即真
var a = 10
while a > 0 {
a--
print(a)
}
// 2.do while循环
// 1> 类型while循环的差别 2>do需要换成repeat
repeat {
a++
print(a)
} while a < 10
11./字符串的使用
//: Playground - noun: a place where people can play
import UIKit
// 1.定义字符串
let str = "hello world"
// 2.遍历字符串中字符
for c in str.characters {
print(c)
}
// 3.字符串的拼接
// 3.1.字符串之间的拼接
let str1 = "小码哥"
let str2 = "IT教育"
// NSString stringwithFormat:@"%@%@", str1, str2]
let result = str1 + str2
// 3.2.字符串和其他标识符之间的拼接
let age = 18
let name = "why"
let height = 1.88
//NSString stringwhithFor
// 拼接其他标识符的格式: \(标识符的名称)
let info = "my name is \(name), age is \(age), height is \(height)"
// 3.3.字符串的格式化: 音乐播放器
let min = 3
let second = 04
//let timeStr = "0\(min):0\(second)"
let timeStr = String(format: "%02d:%02d", arguments: [min, second])
// 4.字符串的截取
let urlString = "www.520it.com"
// 将String类型转成NSString类型 string as NSString
let header = (urlString as NSString).substringToIndex(3)
let middle = (urlString as NSString).substringWithRange(NSRange(location: 4, length: 5))
let footer = (urlString as NSString).substringFromIndex(10)
12./数组的使用
//: Playground - noun: a place where people can play
import UIKit
// 1.数组的定义
// 不可变数组(let)和可变数组(var)
// 1>不可变数组
let array = ["why", "lmj", "lnj", "yz"]
// 2>可变数组
// var arrayM = Array<String>()
var arrayM = [String]()
// 2.对可变数组的操作(增删改查)
// 2.1.添加元素
arrayM.append("why")
arrayM.append("yz")
arrayM.append("lmj")
arrayM.append("lnj")
// 2.2.删除元素
arrayM.removeAtIndex(0)
arrayM
// 2.3.修改元素
arrayM[1] = "why"
arrayM
// 2.4.获取某一个下标值的元素
arrayM[0]
// 3.遍历数组
// 常见
for i in 0..<arrayM.count {
print(arrayM[i])
}
for name in arrayM {
print(name)
}
// 不常见
for i in 0..<2 {
print(arrayM[i])
}
for name in arrayM[0..<2] {
print(name)
}
// 4.数组的合并
//for name in array {
// arrayM.append(name)
//}
//arrayM
// swift中如果两个数组类型是完全一致的,可以相加进行合并
let resultM = arrayM + array
13./字典的使用
//: Playground - noun: a place where people can play
import UIKit
// 1.字典的定义
// 1>不可变字典(let)
// 注意:在swift中无论是数组还是字典都是使用[],但是如果[]中存放的是元素,编译器会认为是一个数组.如果[]中存放的是键值对,编译器会认为是一个字典
let dict = ["name" : "why", "age" : 18, "height" : 1.88]
// 2>可变字典(var)
// var dictM = Dictionary<String, AnyObject>()
var dictM = [String : AnyObject]()
// 2.对可变字典的操作
// 2.1.添加元素
// dict["weight"] = 60 错误写法
dictM["name"] = "why"
dictM["age"] = 18
dictM["heihgt"] = 1.88
dictM["weight"] = 75
// 2.2.删除元素
dictM.removeValueForKey("name")
// 2.3.修改元素
// 注意:如果有对应的key,则修改对应的value,如果没有对应的key,则添加对应的键值对
dictM["age"] = 30
dictM
// 2.4.获取元素
dictM["weight"]
// 3.遍历字典
// 3.1.遍历所有的key
for key in dictM.keys {
print(key)
}
// 3.2.遍历所有的value
for value in dictM.values {
print(value)
}
// 3.3.遍历所有的key/value
for (key, value) in dictM {
print(key)
print(value)
}
// 4.合并字典
// 注意:字典即使类型一直也不可以先加合并
let tempDict : [String : AnyObject] = ["phoneNum" : "+86 110", "sex" : "男"]
//let resultDict = tempDict + dictM
for (key, value) in tempDict {
dictM[key] = value
}
dictM
14./元组的使用
//: Playground - noun: a place where people can play
import UIKit
let userArray = ["why", 18, 1,88]
userArray[0]
let userDict = ["name" : "why", "age" : 18, "height" : 1.88]
userDict["name"]
// 元组的基本写法
let userInfo = ("why", 18, 1.88)
userInfo.0
userInfo.1
userInfo.2
// 给每一个元素起别名
let userInfo1 = (name : "why", age : 18, height : 1.88)
userInfo1.name
userInfo1.age
userInfo1.height
// 别名就是变量的名称
let (name, age, height) = ("why", 18, 1.88)
name
age
height
15./可选类型的基本使用
//: Playground - noun: a place where people can play
import UIKit
// 类中所有的属性在对象初始化时,必须有初始化值
class Person : NSObject {
var name : String?
var view : UIView?
}
// 1.定义可选类型
// 1>普通定义可选类型的方式
// var name : Optional<String>
// 2>语法糖
var name : String?
// 2.给可选类型赋值
name = "why"
// 3.从可选类型中取值
// Optional("why")
print(name)
// 从可选类型中取值:可选类型!-->强制解包
//print(name!)
// 4.注意:如果可选类型中没有值,那么强制解包程序会崩溃
// 强制解包是非常危险的操作:建议在解包前先判断可选类型中是否有值
if name != nil {
print(name!)
print(name!)
print(name!)
}
// 5.可选绑定
// 1> 判断name是否有值,如果没有值,则不执行{}.
// 2> 如果有值,则对可选类型进行解包,并且将解包后的值赋值给前面的常量
//if let tempName = name {
// print(tempName)
//}
if let name = name {
print(name)
print(name)
print(name)
print(name)
}
16./可选类型的使用
//: Playground - noun: a place where people can play
import UIKit
let urlString = "http://www.520it.com"
// 1.普通写法
let url : NSURL? = NSURL(string: urlString)
if url != nil {
let request = NSURLRequest(URL: url!)
}
// 可选绑定
if let url = url {
let request = NSURLRequest(URL: url)
}
// 可选绑定的简介写法
if let url = NSURL(string: urlString) {
let request = NSURLRequest(URL: url)
}
17./函数的基本使用
//: Playground - noun: a place where people can play
import UIKit
// 1.没有参数没有返回值
func about() -> Void {
print("iPhone7s Plus")
}
func about1() {
print("iPhone7s")
}
about()
let view : UIView
// 2.有参数没有返回值
func callPhone(phoneNum : String) {
print("打电话给\(phoneNum)")
}
callPhone("+86 110")
// 3.没有参数有返回值
func readMessage() -> String {
return "吃饭了吗?"
}
print(readMessage())
// 4.有参数有返回值
func sum(num1 : Int, num2 : Int) -> Int {
return num1 + num2
}
sum(20, num2: 30)
18./函数的使用
//: Playground - noun: a place where people can play
import UIKit
// 1.内部参数和外部参数
// 内部参数:在函数内部可以看到的参数名称,称之为内部参数
// 外部参数:在函数调用时,可以看到的参数,成之为外部参数
// 默认情况下从第二个参数开始,既是内部参数也是外部参数
// 如果希望将第一个参数也声明称外部参数,只需要在标识符前加上外部参数的名称即可
func sum(num1 num1 : Int, num2 : Int) -> Int {
return num1 + num2
}
// 函数的重载:函数名称相同,参数不同(1.参数的类型不同 2.参数的个数不同)
func sum(num1 : Int, num2 : Int, num3 : Int) -> Int {
return num1 + num2 + num3
}
// 2.默认参数
func makeCoffee(coffeeName : String = "拿铁") -> String {
return "制作了一杯\(coffeeName)咖啡"
}
makeCoffee("雀巢")
makeCoffee("猫屎")
makeCoffee()
// 3.可变参数
func sum(nums : Int...) -> Int {
var result = 0
for num in nums {
result += num
}
return result
}
sum(12, 30, 40)
sum(44, 20, 30, 44, 55, 66)
// 4.引用参数
var m = 20
var n = 30
// 注意:默认情况形参都是常年
//func swapNum(var m : Int, var n : Int) {
// let temp = m
// m = n
// n = temp
//}
// swapNum(20, n: 30)
// 如果形参前面有inout,则需要传递指针到函数内
func swapNum(inout m : Int,inout n : Int) {
let temp = m
m = n
n = temp
}
swapNum(&m, n: &n)
print("m:\(m) n:\(n)")
// 5.函数的嵌套使用(不常用)
func test() {
func demo() {
print("demo")
}
print("test")
demo()
}
test()
19./类的定义
//: Playground - noun: a place where people can play
import UIKit
class Person : NSObject {
var name : String?
var age : Int = 0
var height : Double = 0.0
}
let p = Person()
// 注意:赋值不是调用set方法,直接拿到属性给属性赋值
p.name = "why"
p.age = 18
p.height = 1.88