Swift -1 语言基础

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..<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最基本的知识了,后面会持续更新,希望和大家一起学习,一起进步,如果有不对的地方,恳请您的指正

你可能感兴趣的:(面向对象,xcode,swift)