Swift基础一

Swift简述

苹果公司于2014年WWDC发布的新开发语言Swift,可与OC共同运行于Mac OS 和iOS平台,用于搭建基于苹果平台的应用程序.

 声明变量和常量

在Swift中使用”let”修饰常量,使用”var”修饰变量.

在声明常量和变量的时候可以使用表情符号,中文等命名常量名和变量名.



//当需要导入类库名时,使用import类库名形式进行导入

import Foundation

//swift 使用print输出

print("Hello, World!")


/*

  /*



  */

*/

//******************************

//1,定义

//显示声明类型:在冒号 :后面书写常量或变量的类型

//可以不显示的声明变量或常量,swift语法中有类似推断机制,可根据该变量或常量的值,来判断他的类型

let a:Int =5   //常量, let修饰,程序运行期间值不变

let b:Int =4;let c:Int =8

var d:Int =4   //变量, var修饰,程序运行期间值可以发生变化

let 春天 =4     //变量名可以用中文,表情符号等,但是,不建议

print(春天)

print("春天 =\(春天)")

//二进制

var twoValue = 0b1000000

print(twoValue)

//八进制

var eightValue = 0o11

print(eightValue)

//十六进制

var sixteenValue = 0x11

print(sixteenValue)

//浮点型 ********************************************************************************

//会吧浮点型判断为 Double类型,所以如果是float类型,需要使用显示声明

var floatValue = 22.3

print(floatValue)

//BOOL 类型***************************

//Swift BOOL类型的值:只有 true false没有其他值

var isTrue:Bool =true

if isTrue {

    print("十六")

}

//Swift 新增的类型**********************

//元组(多个不同类型或者相同类型的值组成),一班结合函数使用

//,元组定义

//方法一,显示标识出元素的类型

let classNews:(String,Array) = ("yuanzu", ["a","b","c"])

//方法二,直接初始化一个元组,通过隐式推断让系统确定每个元素的类型

let newsClass = ("gdgagae4rga4w3", ["d"])

//,元组访问

var httpCode = (des:"successful", value:333)

//1, 根据下标访问元组中的元素

print(httpCode.0)

//2, 根据描述信息访问元组中的元素

print(httpCode.value)

//可选类型******************************************************************

//可选类型单独使用的场景较少,会结合构造方法(OC的初始化方法)来使用,Swift中构造方法有一个安全性原则:每个类创建出来的对象,每个对象的每个属性都要有默认值

//此时可选类型就是很好的选择,因为当外界不赋初值时,它的值为nil

//Swift, nil代表一个确切的值,是个值类型,OC,nil代表一个空指针,是一个引用,

var optionalValue:Int? =3

if var opt2 =optionalValue {

    print(opt2)

}

//断言*********************************************************************

//对于程序来说,断言没什么作用,只是方便程序员调试bug

var age = 2

assert(age >0,"")

//运算符*******************************************************************

//,一元运算符

//负号运算符

var fuValue = 23

var fuValue2 = -fuValue

//正号运算符

var zhegnValue = 3

var zhengValue = +zhegnValue

//,二元运算符

//取余运算符:Swift中取余运算符两端可以为浮点型数据

var remValue = 12.9 %3

print(remValue)

//,三元运算符 ? :

//, Swift新增的运算符

//(1)区间运算符

//...  包含两端的值

//..<  不包含 <后面的值

//

for i in1..<10 {

    print(i)

}

//(2)空合运算符

//综合可选类型使用

/*

     注意:

       1, ?? 前面必须使用可选类型呢

       2, ?? 前后的类型必须一致

*/

var opt:Int! =3

var kongheValue = opt ??23

print(kongheValue)

//字符串****************************************************

/*

    Swift中新增的字符串类型String,除了新增的还可以使用OC中的NSString

    String类型的字符串是值类型

    String本身没有可变和不可变之分,是否可变取决于使用var还是 let来修饰

    对于复杂的字符串,比如截取,,建议使用OC的字符串

*/

//, Swift中字符串String

//1, 定义字符串变量

var varString = "hello world"

var varString2:String ="gdsaga"

//2, 创建空字符串变量

var emptyStr = ""

var emptyString = String()

//3, 判断字符串是否为空

if emptyStr.isEmpty {

    print("字符串是空的")

}

//4, 字符串拼接

var string1 = "nihao"

var string2 = "漂亮"

var string3 = string1 +string2

print(string3)

//5, 截取

var index = string1.startIndex.advancedBy(4)

string1 = string1.substringToIndex(index)

print(string1)

//,使用OC的字符串

//1, 创建

var OCString:NSMutableString =NSMutableString(string:"nizhen")

print(OCString)

//2, 使用OC方法进行拼接

OCString.appendString("漂亮")

print(OCString)

//3, 使用OC方式进行截取

var subString = OCString.substringToIndex(2)

print(subString)

//数组****************************

/*

  Swift中数组是值类型,OC中的数组是引用类型

  Swift数组本身没有可变和不可变之分,是否可变取决于使用var还是 let来修饰

*/

//, Swift数组

//声明一个数组

var carArray = ["","","",""]  //最常用方式

var nameArray:Array = ["a","b","c","d"]

//声明空数组

var intArray = []

var intArr = [Int]()

var intArra:[Int] = [Int]()

var array = Array<String>()

var array1:Array<Int> =Array<Int>()

//数组操作

var swiftArray = ["hao","漂亮",23 , 4,44]

//1, 添加元素

swiftArray += [54,"dg"]

print(swiftArray)

//2, 插入元素

swiftArray.insert("真烦", atIndex:3)

//3, 删除元素

swiftArray.removeAtIndex(4)

//4,

//(1) 根据下标修改

swiftArray[3] ="xia"

//(2) 利用区间运算符修改

//注意,如果修改时,区间上的值比较多,相当于是用后面数组中的元素,替换原数组中对应位置的值

swiftArray[1...2] = ["dsg"]

//5, 数组查询

//(1) for 循环

for var i =0; i <swiftArray.count; i++ {

    print(swiftArray[i])

}

//(2) for  in

for i inswiftArray {

    print(i)

}

//,使用OC中数组

var OCArray:NSMutableArray =NSMutableArray()

//1,

OCArray.addObject("a")

//2, 插入

OCArray.insertObject("HHH", atIndex:0)

print(OCArray)

//3, 删除

OCArray.removeObjectAtIndex(0)

//4, 修改

OCArray.replaceObjectAtIndex(0, withObject:"b")

//****************************字典****************************

/*

   Swift 中的字典也是值类型,OC中的字典是引用类型

   Swift字典本身没有可变和不可变之分,是否可变取决于使用var还是 let来修饰

*/

//,声明方式

var swiftDic = ["name":"qwe","age":33]

var initSwiftD:Dictionary<String,Int> =Dictionary()

//1, 增加元素

swiftDic["address"] =""

//2, 删除

swiftDic.removeValueForKey("address")

//3, 修改

swiftDic["age"] =34

//updateValue 方法,可以修改数据或者插入数据,key值存在时,就是修改操作.key值不存在,是插入操作

swiftDic.updateValue("age", forKey:"name")

//4, 查询

//利用元组遍历字典

for (key, value) inswiftDic {

    print(value)

}

//,使用OC中字典 

var OCDic = NSMutableDictionary()

//1, 增加键值对

OCDic.setObject("hehe", forKey:"name")

//2, 更新

OCDic.setObject("", forKey:"")

//3, 移除

OCDic.removeObjectForKey("")

//4, 查询


//控制流********************************************************'

//分支

//if ... else 

//结合关系表达式使用

if 4 >3 {

    print("22")

} else {

    

}

//switch ... case 

/*

   Swift swith得到强化,但是需要注意:

   1, default 分支不能省,且需要些在最后面

   2, 每个分支至少一句代码

   3, 分支要包含所有的情况

   强化部分:

   1, 分支后没有break,但不会贯穿

   2, case分支后可以为一个区间等

*/

var number = 5

switch number {

case 1...4:

    print("s")

case 5,6,7,8:

    print("f")

    fallthrough//通过 fallthrough关键字实现分支之间的贯穿

default:

    print("")

}


let ageKey = 3

switch ageKey {

case var valuewhere ageKey <10 &&ageKey >1:

    value += 11

    print(value)

default:

    print("")

}

//关键字是元组可以在分支中进行判断

//"_",代表忽略

let point = (x: 10, y:10)

switch point {

case (_,10):

    print("case1")

case (10,0):

    print("case2")

case (10,10):

    print("case3")

default:

    print("case4")

}

//循环***********************************************************

//注意:for循环在Swift 3之后可能会禁用

//for循环  ,  for in 

//while 循环

var whileNum = 0

while whileNum <3 {

    print("")

    whileNum +=2

}

//repeat ... while

repeat  {

    print("")

} whilefalse

//标签语句

//应用场景:循环嵌套

//作用:准确的取消某一个循环的执行

//如果想要取消那个循环,就给这个循环起一个标签,在合适的时机 break该标签,就能实现终止的效果

xue:whiletrue {

    for iin1...4444 {

        print("")

        if i ==4 {

        break xue

        }

    }

}

//枚举****************************************************************

enum Fruit:Int {

    case Apple

    case Banana

    case Orange

}

//获取原始值

print(Fruit.Banana.rawValue)

//获取哈希值

print(Fruit.Banana.hashValue)

enum season:String {

    case Spring =""

    case Summer =""

    case Autumn =""

    case Winter =""

}

//获取原始值rawValue

print(season.Summer.rawValue)

//获取哈希值:Swift在背后实际上使用哈希值来识别枚举的符号(Spring)

//函数*****************************************************************************

/*

   函数其实就是方法

   语法结构:

      func 函数名(参数类表) ->返回值 {

            语句

    }

   参数形式:参数名:参数类型

   多个参数之间用 ,隔开

   Swift 中的文件格式中没有类似于OC中的.h文件,所以,如果需要定义一个私有的函数,可以在func 前添加 private 修饰即可

*/

//***************无参无返回值

func sayHello() {

    

}

//函数调用

sayHello()

//***************有参无返回值

func printPersonName(name:String) {

    print("name =\(name)")

}

//调用

printPersonName("水木年华")

//***************有参有返回值

func sumValue(a:Int, b:Int) ->Int {

    return a + b

}

//调用

var sum = sumValue(3, b:4)

print(sum)

//***************无参有返回值

func giveMoney() ->Int {

    return33

}

//调用

var money = giveMoney()

print(money)

//多个参数多个返回值---返回值用元组

func returnPersonInfor(name:String, gender:String, age:Int) -> (String, String,Int) {

    return (name, gender, age)

}

//调用

var (name, sex, perAge) = returnPersonInfor("花铁杆", gender:"", age:19)

print(name,sex, perAge)

//使用函数时:

   //1, 参数在默认情况下是let类型,在函数内部只能使用,不能重新赋值

   //2, 如果想在函数中给参数赋值,在参数前加var 声明(Swift 3之后将被禁用)

   //3, 如果想在函数内部修改参数值,同时引起函数外部的变量的值发生变化,此时在参数前加 inout修饰(类似于 C语言中传地址的操作)

func exchangeValue(inout a:Int,inout b:Int) ->Void {

  let temp = a

    a = b

    b = temp

}

var first = 3

var second = 5

exchangeValue(&first, b: &second)

print(first,second)

//***************函数高级*******************************************************

//

func addValue(a:Int, b:Int) ->Int {

    return a + b

}

//

func subValue(a:Int, b:Int) ->Int {

    return a - b

}


//,函数作为参数

func getValue(funcName:(Int,Int)->Int, a:Int, b:Int) ->Int {

    return funcName(a, b)

}

//调用

var value = getValue(subValue, a:3, b: 5)

print(value)

//,函数作为返回值

func getFunction(isAdd:Bool) -> (Int,Int)->Int {

    return isAdd ?addValue : subValue

}

//调用

var fun = getFunction(true)

var funValue = fun(4,3)

print(funValue)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值