Swift -1 语言基础

来源:互联网 发布:原创ai算法 编辑:程序博客网 时间:2024/05/27 06:53

Swift 简介:

1.Swift支持所有C和Objective-C的基本类型,支持面向过程和面向对象的编程机制
2.Swift提供了两种功能强劲的集合类型:数组和字典
3.元祖
4.可选类型
5.Swift是一种类型安全的语言
6.Swift是编程语言,Xcode提供了swiftc编译器来编译Swift程序
7.开发环境:OS X系统,Xcode6.1以上


首先来讲解一下Swift中的playground:
Playground是苹果公司在2014年WWDC(苹果开发者大会)随Swift一起推出的,可以实现一边写代码,一边预览效果(即实时预览代码的效果)的工具,相比之前写代码要进过command+R漫长的等待才能预览效果,Playground给程序猿带来了很大的方便.
说明一下,Playground并不支持OC语言,学习Swift的初学者可以直接在Playground里编写代码.
创建Playground的过程也很简单,打开Xcode的界面最上一行选项就是创建Playground

当然Playground有一些不足之处:
1.不支持人机交互
2.暂时不支持管理多个Swift源程序
3.不能执行App


数据类型:
1.变量与常量
2.整型与浮点型
3.元祖类型
4.可选类型

运算符:
1.赋值运算符
2.算术运算符
3.溢出运算符
4.位运算符
5.逻辑运算符
6.nil合并运算符
7.运算符的结合性和优先级

流程控制:
1.顺序结构
2.分支结构
3.循环结构

下面我们上代码:

import Foundation//print("Hello, World!")// 一.数据类型// 变量 var 常量 let// 标识符必须以字符(包括Unicode字符).下划线(_).美元符($)开头,但不能以数组开头,不可以包含空格,不能使用关键字,其长度没有限制var str = "hello"str += "world"let "狗狗表情图片" = "dog" // 这个狗狗表情属于Unicode字符var `class` = 3 // 关键字不能作为标识符,如果要使用,得加上这个符号`,一般情况下不会这样使用// 关于变量的类型和赋值操作var name = "Lucky" // 声明变量name,给name赋值,由于结果是字符串类型,所以也指定了name为字符串类型var age:Int // 指定age的类型是int类型var string: String = "smile" // 指明类型,并赋值var a = 20, b:String, c = "Swift" // 允许一行声明多个变量,用逗号隔开//print("狗狗表情图片");//print(a);//print("Her name is \(name)") // "\(变量)"这样的形式作为占位符// 整型:用Int就可以了let oneMillion = 1_000_000 // 可以增加下划线作为分隔符,只是为了看起来更简便let price = 0110;//print(oneMillion);//print(price);// 整型之间转换必须是显式转换var book1:Int16 = 100;var book2:Int32 = 30;var totalPrice = Int32(book1) + book2 // 这里要转换类型,必须先转换成相同类型,类似OC里的强转//print(totalPrice);var w = 4.0 / 0.0var f = 0.0 / 0.0//print(w) // 输出正无穷 在swift中0是可以作为除数的//print(f) // 输出非数,"not a number"var width:Float = 2.1var height:Double = 3.9var area1 = width * Float(height)var area2 = Int(width) * 4//print(area2) // 类型转换 变量会自动识别结果类型/********************************************************/// 类型别名typealias Age = UInt16 // 类型别名   可以使用Age代替UInt16,类似OC中的typedef重新命名let myAge:Age = 10//print(myAge)/*************************************************/// 元祖,需要掌握其声明方式,在实际应用中非常重要var score = (140, 140, "优秀")var health : (Int, Int, String)health = (182, 78, "良好") // 赋值时必须为所有的成员变量赋值//print("health 元祖的值为:\(health)") // 这个地方注意输出变量不会自动生成//print("health 元祖中身高的值:\(health.0)") // 根据下标取值// ps:有没有发现和OC中的数组很像啊,只不过更加方便简洁了var test:(Int, (Int, String))test = (10, (100, "Swift"))//print("test 元祖中第二个元素中的第一个元素为:\(test.1.0)")// ps:这不就是数组里面套数组么// 定义元祖变量并给定初始值//var score2 = (math: 140, English: 140, Assessment: "A")//print(score2)var score2: (math: Int, English: Int, Assessment: String)score2 = (math: 140, English: 140, Assessment: "A") // 通过key赋值,顺序可以调换//print("score2中数学的成绩是:\(score2.math)")// ps:有没有发现这就是字典啊/***********************************************************/// 可选类型,任何已知类型后面紧跟?即可代表 可选类型 如 int?主要用来表示两种可能:有值.没有值(nil)// 强制解析:在变量或者常量后面添加!注意:必须可选类型的变量和常量确实有值的时候才能解析成功var num1: Int? = 10var num2: Int? = 20if num1 != nil && num2 != nil{    let sum = num1! + num2! // 因为之前设置的类型是可选类型,所以需要加!,强制解析才能想加//    print(sum)}else{    print("num1 或 num2 为nil, 不能强制解析")}// 可选绑定:可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量var str3: String! = "Swift" // !表示隐式解析可选类型if var tmp = str3{//    print("str3的值为:\(tmp)")}else{    print("str3的值为nil, 不能解析")}// 隐式解析可选类型:在已有类型后面添加!如int! 适用于被赋值之后不会重新变为nil的变量var possibleStr: String! = "Swift"print(possibleStr) // 如果String后面跟的是? 那么结果需要用!   如果String后面是!,就会强制解析,打印不需要添加!// 二:运算符var x = 3var y = 4//var aa: Int//var bb = aa = 20 // swift赋值表达式是没有值的,不支持连续赋值var cc = 19 / 4//print(cc)// 除法运算var dd = 2.5 / 1.2 // 输出结果会保留小数,这里和OC不太一样,要注意var ee = 4.3 / 0.0 // 输出inf代表无穷大//print(dd)// 求余运算, 结果的正负完全取决于被除数var ff = -5.2 // 这里负号与数字不能有空格var gg = -3.1var mod = ff % gg//print(mod)var hh = 5//var ii = hh++ + 6 // 先执行运算再+1,所以结果应该是11//print(ii)var ii = ++hh + 6 // 先自身加1,再执行运算,结果是12//print(ii)// 溢出运算符 &- &+ &*var willUnderFlow = UInt8.min// willUnderFlow 等于UInt8的最小值0willUnderFlow = willUnderFlow &- 1 // 下溢,结果是二进制减法 2^8 - 1,8次方是因为UInt8类型//print(willUnderFlow)// 位运算符/*1.按位与 &2.按位或 |3.按位异或 ^4.按位取反 ~5.左位移 <<6.右位移 >>针对的是二进制的计算,了解就行*//*    += 对于 x += y 等价于 x = x + y    -=    *=    /=    &=    |=*/// 区间运算符,必须掌握 a..<b(包含a, 但不包含b) a...b(包含a也包含b) 之间不能有空格//for aa in 0..<10{//    //    print(aa)//}//for bb in 0...10{//    //    print(bb)//}// 比较运算符 结果为bool值// === 特征相等运算符 !== 特征不等运算符//var c = a === b 只有a和b指向的类型实例相同时,c为true// 逻辑运算符/*    && 与    || 或    !  非*/// 三目运算符//var aa = 5//var bb = 3//var str1 = aa > bb ? "a 大于 b" : "a 小于 b"//print(str1)// 空合并运算符,swift新增加运算// 空合并运算符 a ?? b 将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b.注意:表达式a必须是Optional类型,默认值b的类型必须要和a存储值的类型保持一致,如果a为非空值(non-nil),那么值b不会被估值//let words = "hello"//var say: String?//var content = say ?? words//print(content)// 三:流程控制// 1.顺序结构 2.分支结构 3.循环结构// 顺序结构就是程序流程的从上往下执行顺序,就不再多介绍// 分支结构指的是程序中又if while switch判断时,程序会进行选择分支执行//var age1 = 30//if age1 > 20{//    print("年龄大于20岁")//}else{//    print("年龄小于20岁")//}//let score1 = "a"// switch语句中不用break来跳出了,另外一个case可以加多个条件进行判断, 如下所示//switch score1{//    case "A", "a"://    print("优秀")//    case "B"://    print("良好")//    case "C"://    print("一般")//    case "D"://    print("及格")//    case "E"://    print("不及格")//default ://    print("成绩输入错误")//    //}// 使用fallthrough语句贯穿, 新特性//var num = 5//var desc = "\(num)是"//switch num{//case 2, 3, 5, 7://    desc += "质数,而且还是"//    fallthrough//default ://    desc += "整数"//}//print(desc)// case后面的条件为元组//var point = (x : 0, y : 1)//switch point{//case (0, 0)://    print("(0, 0)位于原点")//case (_, 0) : // _代表任意//    print("(\(point.0), 0)位于x轴上")//case (0..<Int.max, 0..<Int.max)://    print("(\(point.0), \(point.1))位于第一象限")//default ://    break//}// 值绑定//var point = (xx : 1, yy : 1)//switch point{//case (0, 0)://    print("(0, 0)位于原点")//case (var a, 0)://    print("该点位于x轴上, x值为:\(a)")//case var (xx, yy) where xx > 0 && yy > 0: // 条件值绑定//    print("(\(xx),\(yy))位于第一象限")//default://    break//    //}/******************循环结构**********************/// for循环和for in循环//for var count = 0; count < 10; count++ { //这里要注意++运算符与变量不能有空格//    print(count);//}//let base = 3//let power = 10//var answer = 1//for _ in 1...power{ // _表示忽略//    //    answer *= base//    print(answer)//}// 标签:紧跟冒号的标识符,只有放在循环语句或switch语句之前才有作用outer: for var i = 0; i < 5; i++ {    // 内层循环    for var j = 0; j < 3; j++ {        print("i的值为:\(i), j的值为\(j)")        if j == 2{            break outer // 关于break和continue 等同于OC        }    }}

到这里,已经完成了Swift最基本的知识了,后面会持续更新,希望和大家一起学习,一起进步,如果有不对的地方,恳请您的指正

0 0
原创粉丝点击