//Swift 与 OC 的区别
/*
*可以不写分号
*Swift严格要求代码规范,=号前后要有空格
*打印使用print
*使用var修饰变量 使用let修饰常量
*在不指定变量(常量)类型时,根据所赋的值自动匹配
*在playground中运行更直观
*/
/*命名规范
*以数字、字母、下划线组成,不以数字开头
*不能使用系统关键字
*可以使用`关键字`命名
*全面支持编码格式
*/
/***************** 基础数据类型 ************************/
//1.整型
let number = 10
let anumber : Int = 20
Int.max
Int.min
Int32.max
//2.浮点型
//不指定时,默认是Double类型
let bNum = 3.14
var floatNum : Float = 3.14159265357
var doubleNum : Double = 3.141592653572345687890
//3.布尔
var boolValue = true
var aBoolValue = 3 > 7
//4.字符 & 字符串
//1)字符
var charValue : Character = "a"
//2)字符串
var stringValue = "张三"
var stringValue1 = "包宿"
stringValue + stringValue1
//5.可选类型
/*
*有值返回对应的值,无值返回nil
*定义常量(变量)必须指定类型
*问号?与定义的类型之间不可以加空格的
*/
var optionvalue : String?
var aOptionValue : String? = "20"
//强制解析
/*
*强制解析:可选变量有值时使用
*使用方法:变量(常量)+ !
*/
if aOptionValue != nil {
aOptionValue = aOptionValue! + "16"
}
//6.元组
var httpError = (404, "NotFound", (1, 2, 3, 4))
httpError.0
httpError.1
httpError.2.1
var (code,error) = (404, "NotFound")
code
error
var 李四 = (name:"李四", age: 17, sex : "不详")
李四.name
李四.age
李四.sex
/******************Array Dictionary string*********************/
//1.字符串
//1)定义
var aStrValue = "这是一个字符串"
var bStrValue : NSString = "这也是一个字符串"
//2)定义空的字符串
var cStrValue = ""
var dStrValue = String()
//3)判断两个字符串是否一致
let 班长 = "大哥"
var 学委 = "二哥"
班长 == 学委
//4)拼接
学委 + "❤️" + 班长
学委 += 班长
学委
//打印变量
print(班长)
print(班长,学委)
print("\(班长)"+"\(学委)")
print("\(班长)❤️\(学委)")
//5)判断是否为空
班长.isEmpty
//6)大小写转化
let ? = "Mao"
?.uppercaseString
?.lowercaseString
//2.数组
//1)定义
//Swift 使用var修饰可变数组,使用lei修饰不可变数组
var arrayValue = [1,2,3,4,"One"]
var arrValue : Array<Int> = [1,2,3,4]
var ocArrValue : NSMutableArray = [1,2,3,4]
var ocEmptyValue : NSMutableArray = NSMutableArray()
//2)添加元素
//Swift数组
arrValue += [1,3]
arrValue.append(10)
//oc
ocArrValue.addObject(100)
ocArrValue.insertObject(9, atIndex: 2)
ocArrValue.removeObject(9)
//3)删除元素
//ocArrValue.removeAllObjects()
//arrValue
//arrValue.removeAtIndex(2)
//arrValue
//arrValue.removeRange(2...5)
//arrValue.removeRange(1..<3)
//arrValue
//4)个数
arrValue.count
//5)遍历
arrValue
for item in arrValue
{
print(item)
}
//倒序输出
for item in arrValue.reverse(){
print(item)
}
//元组遍历
for (index,value) in arrValue.enumerate()
{
print("\(index):\(value)")
}
//3.字典
//1)初始化
var emptyDic = Dictionary<Int, String>()
var dicValue : Dictionary<Int, String> = [1:"李三❤️李四",2:"学委❤️班长",3:"张三❤️李四",4:"大锤❤️小锤",5:"?❤️?",6:"小明❤️小红",7:"三❤️四",8:"屌丝❤️左手❤️右手"]
//2)添加修改
//如果字典存在Key,则更改对应的值,没有此Key,则添加此键值对
dicValue[9] = "男孩❤️女孩"
//3)个数
dicValue.count
//4)移除
dicValue.removeValueForKey(5)
//字典中键值对,都是由hash组成的下标
var index = dicValue.indexForKey(4)//获取字典下标
dicValue.removeAtIndex(index!)
dicValue
//2.0新添加的方法
//dicValue.removeAll()
//5)遍历
for value in dicValue.values{
print(value)
}
for key in dicValue.keys
{
print(key)
}
for keyValue in dicValue{
print(keyValue)
}
/*********运算符*************/
var a = 10
var aa = 20
a + aa
a - aa
a * aa
a / aa
//取余
var ? = 9 % 4
var ?? = (-9) % 4
var ??? = (-9) % 4
var ???? = (-9) % (-4)
//OC达不到的
var ????? = 9 % 2.5
var ?????? = 9.5 % 2
var ??????? = 9.5 % 2.5
//与(&&) 或 (||) 非(!)
var 与 = 3 > 6 && 3 < 2
var 或 = 3 > 6 || 3 > 2
!与
var aaa = 3 > 4 ? 3 : 4
//1.if else
if a > aa{
}else if a == aa{
}else{
}
//2.for循环
var sum = 0
for var i = 0; i < 100; i++ {
sum += i
}
sum
sum = 0
for j in 1..<100{
sum += j
}
sum
sum = 0
while sum < 100{
sum++
}
sum
sum = 0
//swift 2.0之前 repeat关键字依旧为do
repeat {
sum++
}while sum < 100
sum
//4.Switch case 不用写break case可以写两个条件
var score = "A"
switch score {
case "A":
print("优秀")
fallthrough//贯穿,强行执行到下一个case
case "B":
print("良好")
default:
print("不及格")
}
var one = 16
switch one {
case 13...20 where one == 16:
print("符合条件")
fallthrough//贯穿,强行执行到下一个case
case 15...20:
print("不完全符合条件")
default:
print("不符合条件")
}
var point = (1,0)
switch point{
case (_,0):
print("在x轴上")
case (0,_):
print("在y轴上")
default:
print("不在频道上")
}
/*************函数****************/
//1.无参无返
func sayHello(){
print("嗨,菇凉")
}
sayHello()
//2.有参无返
//Swift2.0之后,默认第二个参数 内部参数外部参数相同
//Swift2.0之前,若想内部参数外部参数保持一致,需要在内部参数前加"#"
func getName(name : String,age : Int){
print("\(name)今年\(age)岁了")
}
getName("何老师", age: 18)
//Swift2.0之后,若想第一个参数的内部参数有外部参数,需要在内部参数前,给其起个别名
func getName2(personName name : String, presonNameAge age : Int){
print("\(name)今年\(age)岁了")
}
getName2(personName: "李四", presonNameAge: 5)
//默认参数
//默认参数,函数定义时,需要在内部参数前加"_"+空格,并且在参数类型后赋值
//调用时,可以不给默认参数传值,不传值,则用声明时的初始值,传值,则使用所传值
func getName3(name : String,_ name1:String = "屌丝"){
print(name + "❤️\(name1)")
}
getName3("王军岐")
getName3("吴帅", "王军岐")
//3.有参有返
func getName1(name : String) ->String{
return name;
}
//多返回值,实质返回一个元组
func getName4(name : String, age : Int, sex : String) ->(name1 :String, age1 : Int, sex1 : String)
{
return (name,age,sex)
}
var person = getName4("李涵", age: 18, sex: "boy")
//4.无参有返
func getName5() ->String{
return "这是一个无参有返的函数"
}
var getName = getName5()
//inout
var count = 20
func changeCount(inout number : Int){
number = 40
}
count
changeCount(&count)
count
//不确定参数个数
func sumNum(numbers:Int...)->Int{
var sum = 0
for i in numbers{
sum += i
}
return sum
}
var sumValue = sumNum(1,2,3,4,5,6,7,8,9)
/*******************结构体 类******************/
//1)结构体
struct Student{
var name : String?
var age : Int?
//构造器
init(name : String,age : Int){
self.name = name
self.age = age
}
}
var student = Student(name: "张志超", age: 18)
student.name
student.age
student.name! + "为什么每天这么困"
//类
class Person {
//定义属性
var name :String?
var age : Int?
var sex : String?
//实例方法
func description()->String{
return "这是一个实例方法"
}
//类方法
class func description()->String{
return "这是一个类方法"
}
//构造器
init(name : String,age : Int,sex : String){
self.name = name
self.age = age
self.sex = sex
}
deinit{
//移除通知
//代理置空
}
}
var 大黄 = Person.init(name: "小伟", age: 58, sex: "未知")
var 大哥 = Person(name: "小可爱", age: 48, sex: "未知")
//调用实例方法
大黄.description()
//调用类方法
Person.description()
//继承
class Teacher: Person {
override func description() -> String {
return "重写父类方法"
}
}
var teacher = Teacher(name: "涛哥", age: 30, sex: "男")
teacher.name
teacher.age
teacher.description()
//代理
protocol MyDelegate{
func sayHello()->String
}
class cat: MyDelegate {
func sayHello() -> String {
return "海,海拉"
}
}
//签协议
class Student1: Person,MyDelegate {
func sayHello() -> String {
return "海,海拉"
}
}
//闭包,匿名函数 相当于OC中的block
//(参数列表)->返回值类型 in 代码段
var block = {(str :String ,str1 :String) -> String
in
return str + str1
}
var result = block("Love","You")
result