Swift - 01

//引入的时候没有双引号,也没有尖括号,直接写框架名
import Foundation


//输出函数是print
//字符串取消前面的@标记
//没有分号,分号是可选写入的
print("Hello, World!")


/*Swift和OC的不同:
1.类型判断,不需要指定变量的类型,Swift相比OC最强大的地方在于编译器,Swift编译器是全类型编译器,在编译的时候就知道了所有对象的类型,这是OC的动态编译所做不到的.这样做有一个好处就是类型安全.
2.Swift当中不能向nil发送消息.
3.泛型 允许像Java那样将数据类型参数化.
4.字符串做了一些增强
5.switch语法做了精简,提供了范围限制
*/



//1.变量和常量的声明
let myGender = "男"//声明常量

var carName = "BMW"//声明变量

carName = "Audio"

//Swift中允许使用任何unicode字符作为变量和常量的名字,包括那些不在ASCII编码的字符(貌似然并卵)
let 李帅 = "呆萌欧巴"
let 💰 = "钱"
let 👏 = "真棒"
print(💰)

var a = 10
var b = "A"
var c = 100.1
var d = 200.2
var e = c + d
var char = "A"//这样创建的是字符变量

//2.类型推断
//swift定义变量和常量的时候,不需要标志出变量和常量的类型,系统会自动进行匹配补全,但是也可以进行手动指定

let name = "周杰伦"//这里就会自动推断为NSString类型,是由后面的字符串推断出来的.
let name1 : String = "八路"//这个常量就不会进行类型推断,因为已经显示的指定了常量的类型.

//swift中所有的类型(系统原声的)都是首字母大写,剩下的小写
var age = 20
var age1 : Int = 20
var weight : Float = 130
var money : Double = 20000000000
//不论是变量还是常量,要么赋初值,要么指定类型(可选类型,加问号?),要么指定类型并且赋初值.否则报错.

//3.可选类型
//在swift当中对象没有赋初值就没有起始值,没有值的量是不能使用的,会报错和警告,这个时候需要可选类型,可选类型简单来说可以理解为,允许为空.
//将一个变量声明为可选类型?很简单,在最后面加一个问号就行了
var sex : String?
print(sex)
sex = "女"
print(sex)
print(sex!)//显示拆包,用!(叹号)可以将可选类型中的数据拆解出来
//下面的代码因为不能为空又没有初始化,所以会报错
//var sex : String
//print(sex)

//4.字符串
//(1)创建空的字符串
var str_empty : String = ""
var str_empty1 : String = String()
//(2)判断字符串是否为空
if str_empty.isEmpty{
    print("字符串是空的")
}
//(3)字符串拼接
var str1 = "lanou"
var str2 = "3g"
var str3 = "!!!"
var str4 = str1 + str2 + str3
print(str4)
//(4)字符串中间插入数值
//swift中占位符更改了,使用\()来进行变量和常量的取值
print("蓝鸥官网:\(str4)\n")
//(5)获取字符串的长度
print(str4.characters.count)
//(6)字符串等值判断
if str1 != str2{
    print("两个字符串不相等")
}

//5.隐式类型转换
//swift里面没有隐式类型转换,只有显示类型转换
//swift是强语言 oc是弱语言
//强制类型转换
let aa : Int = 3
let bb : Float = 3.2
var cc = Float(aa) + bb;

//6.数组的使用
//swift中的特点:(1).存储的所有数据必须是同一类型 (2).不必非得是对象类型,基本数据类型也可以存储
//数组的创建方式
var nameArray = ["周杰伦","刘德华","张学友"];//首先推断为数组,数组里面元素的类型为字符串
var nameArray1 : Array<String> = ["李宇春","林心如","王菲"];//这种是直接显式指定数组和某元素类型
//创建一个空的数组
var array = Array<String>()//推荐用这种
var array1 = [Int]()//创建一个整型的数组

//访问数组
print("数组第一个元素是\(nameArray[0])")
//添加元素
nameArray.append("宋恩彩")
nameArray.insert("宋仲基", atIndex: 0)
print(nameArray)
//删除
nameArray.removeAtIndex(0)
print(nameArray)
//修改
nameArray[0] = "宋慧乔"
print(nameArray)

//7.字典
//定义字典
var score:Dictionary<String,Int> = ["飞轮海":99,"SHE":82,"南拳妈妈":31]
//定义空字典
var dic1:Dictionary<String,Int> = [:]
var dic2 = Dictionary<String,Int>()//推荐
//添加键值对
score["动力火车"] = 98
//修改某个键值对
score["SHE"] = 89
print(score)
//删除
score.removeValueForKey("SHE")
print(score)

//8.元组
//元组是将任意类型的任意个数的元素组成一个新的数据类型
var status = ("研发32",["18","17","100"],32)
//print(status)
var status1 : (className : String,age:Array,count:Int) = ("研发32",["18","17","100"],32)
//print(status1)
//元组数据的访问
//方式1
print(status.0)
//方式2
print(status1.className)//推荐
//元组的建议:元组中的元素过多,用标记名称,元组的元素较少,种类能够分开,直接使用下标


//9.分支语句
//在swift中,bool类型只有true和false,没有yes和no
let flag = true
if flag == true{
    print("好开心")
}else{
    print("不开心了")
}

//switch

//(1).不需要使用break,不会有贯穿现象
let ageOfCat = 10
//switch ageOfCat{
//case 0 :
//    print("娘胎里的宝宝")
//case 1 :
//    print("小猫咪,也是宝宝")
//default :
//    print("大猫,依旧是宝宝")
//}

//(2).支持区间选项
//switch ageOfCat{
//case 0..<10 ://闭区间
//    print("宝贝")
//case 10...100 ://半闭区间
//    print("大宝贝")
//default :
//    print("千年老妖")
//}

//(3).支持where子句
switch ageOfCat{
case var value where ageOfCat < 10 && ageOfCat > 0 :
    print("小宝宝")
   case var value1 where ageOfCat >= 10 && ageOfCat < 100 :
    print("大宝宝")
default :
    print("heihei")
}

//10.循环
//for循环
for var i = 0; i<10; i++ {
    print("我是第\(i)遍")
}

let arr = ["🐂","🐱","🐰","🐔","🐶","🐷"]
//遍历数组
for a in arr{
    print(a)
}

//遍历字典
let dict = ["如花":18,"西施":16,"杜十娘":13]
for (key , value) in dict{
    print("\(key) -> \(value)")
}

//while
var number = 5
while number > 0{
    number--
    print(number)
}

//repeat
repeat{

print("dasas")
number--
}while number > -6

//11.函数
//无参无返回值的函数
func function1() ->Void{
    print("我什么也不干")
}

//无参数有返回值的函数
func function2() ->Int{
    return 10
}

//有参数无返回值的函数,参数列表是先写参数名,再写参数类型
func function3(a:Int,b:Int) ->Void{
    
}
//有参数有返回值的函数
func function4(a:Int,b:Double) ->Int{
    return a + Int(b)
}

//函数调用的时候,需要显示的表明参数名字.,但是一般第一个参数不写,剩下的参数都要表明参数的名字
print(function1())
print(function2())
print(function4(1, b: 2.2))
//inout参数
//参数默认是let类型的,但是swift提供了另外一种方式,可以将参数和传入的值进行关联,就是inout

func change(inout value : Int){
    value = 10
}

var number1 = 20
change(&number1)
print(number1)

//12.枚举
enum Season : Int{
    case spring = 10
    case summer
    case autumn
    case winter
}
print(Season.summer.rawValue)








posted @ 2016-04-08 14:16  可乐1314的故事  阅读(188)  评论(0编辑  收藏  举报