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.0
var f = 0.0 / 0.0
//print(w) // 输出正无穷 在swift中0是可以作为除数的
//print(f) // 输出非数,"not a number"
var width:Float = 2.1
var height:Double = 3.9
var 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? = 10
var num2: Int? = 20
if 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 = 3
var 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.1
var 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的最小值0
willUnderFlow = willUnderFlow &- 1 // 下溢,结果是二进制减法 2^8 - 1,8次方是因为UInt8类型
//print(willUnderFlow)
// 位运算符
/*
1.按位与 &
2.按位或 |
3.按位异或 ^
4.按位取反 ~
5.左位移 <<
6.右位移 >>
针对的是二进制的计算,了解就行
*/
/*
+= 对于 x += y 等价于 x = x + y
-=
*=
/=
&=
|=
*/
// 区间运算符,必须掌握 a..
//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..
// 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最基本的知识了,后面会持续更新,希望和大家一起学习,一起进步,如果有不对的地方,恳请您的指正