Swift 语言基础

  • 数据类型

  • 运算符

  • 流程控制

  • Swift简介:
    支持所有C和Object-C的基本类型,支持面向过程和面向对象的编程机制;
    两种功能强劲的集合类型:数组和字典;
    元组;
    可选类型;
    Swift是一种类型安全的语言。

  • Playground提供了及时查看的功能
    不支持人机交互
    不支持应用程序
    快速体验Swift语法,测试API功能

  • 数据类型
    1:变量与常量的声明方式
    2:整型与浮点型
    3:元组类型
    4:可选类型

  • 核心代码

import Foundation

// 变量var 常量let
// 表示符必须以字符(包括Unicode字符)、下划线(_)、美元符($)开头,但不能以数字开头,不可以包含空格,不能使用关键字,其长度没有限制。
var string = "hello"
string += "world"
println(string)

let  = "dog"
println()

//var 'class' = 3 // 关键字不推荐作为标示符

var name = "lucky"
var age: Int = 2

var a = 20, b : String , c = "Swift"
println("Her name is \(name)") // Swift中占位符号用\(变量名)的形式

// 整形用Int 就行了
let oneMillion = 1_000_000 // 可以增加下划线作为分隔符,也可以在数值前增加额外的值
let price = 0110
println(oneMillion)

// 整形之间的转换必须是显示装换
var book1:Int16 = 100
var book2:Int32 = 50

var totalPrice = Int32(book1) + book2   // 强制类型转换

var w = 4.0 / 0.0
println("4.0 / 0.0得\(w)")  // 输出正无穷大那个

var f = 0.0 / 0.0
println("0.0 / 0.0得\(f)")   // 非数

var width: Float = 2.1
var height: Double = 2.7
var area = width * Float(height)
println("3.2 * 2.7相乘之后得\(area)")

var area1 = Int(width) * 4  // 整形输出的结果会保留整数
println("宽的四倍是\(area1)")

/**************类型别名******************/
typealias Age = UInt16
var myAge: Age = 10

/**************元组*********************/
var score = (140, 140, "优秀")

var health: (Int, Int, String)
health = (156, 78, "Swift") // 必须为每一个元素赋值
println("health的值为\(health)")
println("health元组合的下标第三个元素的值为\(health.2)")

var text:(Int, (Int, String))
text = (24, (45, "jiayuanfa"))
println("text元组中的子元组的第二个值为\(text.1.1)") // 复合元组合数组方法

var score1: (math:Int, english:Int, accessment:String)
score1 = (math:78, english:89, accessment:"jiayuanfa")
println("数学成绩为\(score1.math)")

/************可选类型(Swift中的特性)*****************/
// 任何已知类型后面紧跟?即可代表可选类型 如 Int?
// 可选类型的作用就是表示值缺失的情况
var string2 = "helloGeek"
//var num: Int  = string2.toInt()
var num:Int? = string2.toInt()
println("字符串转化为整形后为\(num)")     // 输出nil 表示值缺失 nil表示一个值

// 强制解析:在变量或者常量后面添加!注意:必须可选类型的变量或者常量确实有值的时候才能解析成功
var num1: Int? = 10
var num2: Int? = 20
if num1 != nil && num2 != nil{
    let sum = num1! + num2!
    println(sum)
}else
{
    println("不能强制解析!")
}

// 可选绑定:可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量
var str3: String! = "jiayuanfa"
if var tmp = str3{
    println("str3的值为\(tmp)")
}else
{
    println("不能强制解析!")
}

// 隐式解析可选择类型:在已有类型后面添加!如Int!适用于被赋值之后不会重新变为nil的变量
var possibleStr: String! = "贾元发"
println(possibleStr)

// 注释:多行注释可以嵌套
/*

/*
第一层注释
第二层注释
*/

*/```

- 输出结果
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-5871bd464b344bc1.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

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

- 核心代码

import Foundation

//var x = 3
//var y = 4 // 赋值

//var a: Int
//var b = a = 20 // 警告: Swift赋值表达式是没有值的,不支持连续赋值

// 算术运算符
var c = 19 / 4
println("c value is (c)") // 结果取整

var d = 2.5 / 1.2
println("d value is (d)") // 结果取余

// 求余运算
var g = -5.2
var h = 3.1
var mod = g % h
println("result is (mod)") // 正负依赖于被除数

var a = 3
var b = a++ + 6
println("先运算后++的值为(b)")

var e = ++a + 6
println("先++再运算的值为(e)")

// 溢出运算符 &- &+ &* &/ &%
var willUnderflow = UInt8.min
// willUnderflow 等于UInt8的最小值为0
willUnderflow = willUnderflow &- 1 // 下溢出
println(willUnderflow)

//let x = 20
//let y = x &/ 0
//let z = x &% 0
//println("溢出运算之后的y = (y) z = (z)")

// 位运算符
/*
&按位与
| 或
^异或
~取反
<< 左位移

右位移
*/

// 扩展后的赋值运算符
/*
+= 对于 x += y 等于 x = x+y
-= 对于 x -= y 等于 x = x-y
*=
/=
&=
%=
|=
*/

// 区间运算符 a.. for a in 0..<10{
println("a 的值为(a)")
}

for m in 0...10{
println("m 的值为(m)")
}

// 比较运算符 结果为Bool值
// === 特征相等运算符 !== 特征不等运算符号
// c = a === b 只有a和b指向的类型实例形同的情况时,c为ture

// 逻辑运算符
/*
&&与
|| 或
! 非
*/

// 三目运算符
var j = 10
var k = 5
var str = j > k ? "j 大于 k" : "j 小于 k"
println("比较结果为(str)")

// 空合并运算符 a ?? b 首先对a 进行空判断 如果有值的话就进行解封,否则就返回默认值b
/**

  • 1:表达式a必须是可选类型
    默认值b的类型必须和a存储值的类型保持一致
    2:如果a为非空值的话(non-nil),那么值b将不会被赋值
    */
    let words = "jiayuanfa"
    var string: String? = "jikexueyuan"
    var content = string ?? words // 这句话的意思就是如果变量string有值的话 返回string的值 否则返回常量words的值
    println("空合并之后的值为(content)")

// 运算符的优先级和OC相同,这里不作解释```

控制流

1:顺序结构
2:分支结构
3:循环结构

import Foundation

/*********分支结构**********/
var age = 20
if age > 20{
    println("年龄大于20")
}else{
    println("年龄小于20")
}

// switch控制语句需要注意的点有 
/*
1:每一条case语句至少包含一条语句, 否则程序会崩溃;
2:每一条case语句完毕之后不必用break跳出循环,系统会自动终止;
3:case条件可以有多个表示或,用逗号隔开即可;
4:fallthough语句是贯穿语句;
5:case块后的条件还可以是一个范围或者元组,支持值绑定。
*/
let score = "a"
switch score{
    case "A", "a":
    println("优秀")
    case "B":
    println("良好")
    case "C":
    println("及格")
    case "D":
    println("不及格")
    case "E":
    println("差劲")
default:
    println("输入有误!")
}

// 使用fallthrough语句贯穿 即继续执行 不跳出
var num = 5
var desc = "\(num)是"
switch num{
case 2, 3, 5, 7 :
    desc += "质数,而且还是"
    fallthrough
default:
    desc += "整数"
}
println(desc)

// case后的条件为元组
var point = (x: 3, y: 3)
switch point{
case (0, 0):
    println("(0, 0)位于原点")
case (_ , 0):
    println("(\(point.0), 0)位于x轴")
case (0...5 , 0...5):
    println("(\(point.0), \(point.1)位于第一象限)")
default:
    break
}

// 值绑定
var point1 = (x: 1, y: 0)
switch point1{
case (0, 0):
    println("(0, 0)位于原点")
case (var x , 0):
    println("该点位于x轴上,x的值为\(x)") // y坐标值为0,进入该case块,并将元组的x成员绑定到临时变量a
case var (x, y) where x > 0 && y > 0:   // 条件值的绑定
    println("(\(x), \(y)位于第一象限)")
default:
    break
}

/*************循环结构************/
// 条件执行体不必写在小括号中,但是大括号必须有
for var count = 0 ; count < 10 ; count++ {
    println(count)
}

let base = 3
let power = 10
var answer  = 1
for _ in 1...power {    // 下划线表示循环条件中的任意值
    answer *= base
    println("answer的值为\(answer)")
}

// 标签:紧跟冒号的表示符, 只有放在循环语句或者switch语句之前才有作用
outer: for var i = 0 ; i < 5 ; i++ {
    // 内层循环
    for var j = 0 ; j < 3; j++ {
        println("i的值为\(i), j的值为\(j)")
        if j == 2 {
            break outer // 这里表示如果j == 2的时候结束外层循环 即结束了全部循环 continu语句指的是忽略本次循环 执行下一次循环
        }
    }
}```

- 运行结果

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-25793eb1d78bb676.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

你可能感兴趣的:(Swift 语言基础)