Swift学习总结

Swift学习总结

现在学习Swift这门语言也两周了,也算开了个头了,刚开始学习可能对以前有过其它语言学习经验的人来说不是很习惯,但是慢慢入门了,习惯了它的开发环境和语法结构也就会好很多。那现在我就总结一下我这两周的学习内容吧。

一、Swift学习环境

1.首先你要有一台装有OS-X系统的电脑
2.再然后就是下载Swift开发工具X-code,我们现在用的是7.2版本
3.一切就绪之后就可以新建一个工程了

Swift学习总结_第1张图片
屏幕快照 2016-08-06 上午9.22.43.png

现在我们建的ios应用,那么就选中图上的(ios Application),然后选择单视图应用( Single View Application),当然如果你要做其它类型的应用你可以选择其它os-X\tvOS等等


Swift学习总结_第2张图片
屏幕快照 2016-08-06 上午9.35.29.png
Swift学习总结_第3张图片
屏幕快照 2016-08-06 上午9.28.46.png

上述工作做完之后,点击next进入如下界面。第一项为项目名称,最好用全英文;第二项组织、公司名称;第三项公司或个人网站域名,倒着写,如果你的app上线,那么这就是它的唯一标识,其它的我想也不用过多介绍了。

Swift学习总结_第4张图片
屏幕快照 2016-08-06 上午9.35.29.png

这些都搞完之后点next,下个页面选择创建项目的储存路径,整个工程就完成了。

二、Swift语法

1.基本语法

标识符的命名规则

  1. 字母(Unicode字符)、数字、下划线,数字不能开头
  2. 大小写敏感
  3. 不能使用关键字做标识符
  4. 驼峰标识 - 第一个单词全小写以后每个单词首字母大写
  5. 见名知意

2.数据类型

1.Int类型(整型)
分为Int和UInt(无符号整型),有8位,16位,32位,64位,当然Int 和UInt取值范围是不一样的。

print(Int8.max) // 2^7-1
print(Int8.min)// -2^7
print(UInt8.max) //2^8-1
print(UInt8.min) //0

2.浮点数Float和Double
Float(单精度浮点数)表示32位浮点数、Double(双精度浮点数)表示64位浮点数

123 = 1*10^2 + 2*10^1 + 3*10^0
x = 101     // 十进制
print(x)
 5 = 1*2^2 + 0*2^1 + 1*2^0
x = 0b101   // 二进制(binary)
print(x)
65 = 1*8^2 + 0*8^1 + 1*8^0
x = 0o101   // 八进制(octal)
print(x)
 257 = 1*16^2 + 0*16^1 + 1*16^0
x = 0x101   // 十六进制(hexadecimal)
print(x)
用科学计数法表示小数
y = 1.23e4
print(y)    // 12300.0
y = 1.23e-4
print(y)    // 0.000123

3.Bool类型
布尔类型只有两种值,即true和false。
4.字符串类型
"Hello,world!"

正常情况下表示整数首选Int,表示小数首选Double,表示字符串首选String,表示真假首选Bool

3.常量和变量

用let定义常量,用var定义变量;常量和变量可以用字母、下划线、数字命名,但是不能已数字开头。

let constA: Double = 2.25
print(constA)
var varB:Float
varB = 3.14159
print(varB)

4.运算符

Swift中运算符由算术运算符、关系运算符、短路运算符、赋值运算符、位运算符等组成。
1.算术运算符
+、-、*、/、%
==算术运算符两边数据类型必须一致;整数除以整数不会有小数部分;整数除以0产生运行事异常,小数除以0可能的结果是inf/-inf/nan==
我们还经常会用到字符串插值:

print("\(a) + \(b) = \(a + b)")

print("\(a) - \(b) = \(a - b)")```
2.关系运算符
  <、 > 、<=、 >=、 ==、 !=
3.短路运算符
&&(短路与)、||(短路或)、!(非)
4.赋值运算符
简单赋值运算符:=
复合赋值运算符:+=、-=、*=、/=、%=
5.三元条件运算符
c = a < b ? a : b(如果a

func cube(n: Int) -> Int{
return n * n * n
}
for a in 100...999{
let c = a / 100 //百位
let d = (a % 100)/10 //十位
let f = a % 10 //个位
if a == cube(c) + cube(d) + cube(f){
print(a)
}
}

2.猜数字

let answer = Int(arc4random_uniform(100)) + 1
var thyAnswer: Int
var counter = 0
repeat{
counter += 1
print("请输入你猜的数字:",terminator: "")
thyAnswer = inputInt()
if thyAnswer > answer
{
print("小一点")

}
else if thyAnswer < answer{
    print("大一点")
}
else {
    print("恭喜你猜对了!你总共猜了\(counter)次")
}

} while thyAnswer != answer
if counter > 7{
print("你的智商该充值了!")
}

3.Craps赌博游戏

func roll() -> Int{
return Int(arc4random_uniform(6)) + 1
}
var money = 100000
repeat{
print("玩家总资产: ¥(money)元")
var debt: Int
repeat{
print("请下注:", terminator: "")
debt = inputInt()
}while debt <= 0 || debt > money
var needsGoon = false
let firstPoint = roll() + roll()
print("玩家摇出了(firstPoint)点")
switch firstPoint {
case 7, 11:
print("玩家胜!")
money += debt
case 2, 3, 12:
print("庄家胜!")
money -= debt
default:
needsGoon = true //游戏继续
}

while needsGoon{
    let currentPoint = roll() + roll()
    print("玩家摇出了\(currentPoint)点")
    if currentPoint == 7{
        print("庄家胜!")
        money -= debt
        needsGoon = false
    }
    else if currentPoint == firstPoint {
        print("玩家胜!")
        money += debt
        needsGoon = false
        
    }
}

}while money > 0

print("你破产了!!!")

4.百钱买百鸡

GTE:穷举法(穷尽所有的可能性直到找到正确答案)
for x in 0...20{
for y in 0...33{
let z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100 && z % 3 == 0{
print("公鸡:(x),母鸡:(y),小鸡:(z)")

    }
}

}

5.打印菱形

print("row = ",terminator: "")
let row = inputInt()
for i in 0.. //通过行号计算出星星的数量和空格的数量
//先打印空格再打印星星就可以了
let star: Int
let space: Int
if i <= row/2 { //上半部分
star = 2 * i + 1
}else{ //下半部分
star = 2 * (row - i) - 1
}
space = (row - star)/2
for j in 0.. print(" ",terminator: "")
}
for j in 0.. print("*",terminator: "")
}
print("")
}



![屏幕快照 2016-08-06 上午11.58.34.png](http://upload-images.jianshu.io/upload_images/2670573-d20291119ef835b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###5.数组
1.数组的定义和初始化
创建数组的方法很多,下面介绍这几种:

var array1 = Int
var array2:[Int] = []
var array3 = [99,12,34,166,7]
var array4 = [Int](count: 100, repeatedValue: 1)

2.获取数组元素个数

print(array1.count)
print(array2.count)
print(array3.count)

3.对数组中的元素进行遍历

for i in 0.. //[]是对数组进行下标运算(取出指定位置的元素)
print(array3[i])
if i == 1{
array3[1] = 520
}
}
print(array3)
//只读循环(在循环过程中不能修改数组元素)
for str in array7{
print(str)
}

//用元组索引
var array7 = ["apple","orange","banana"]
for (index, value) in array7.enumerate(){
print("(index). (value)")
}



![屏幕快照 2016-08-06 下午2.09.14.png](http://upload-images.jianshu.io/upload_images/2670573-c4d54c8c8a690d4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.向数组中添加元素

var array5: [String] = []

array5.append("strawberry")
array5.append("pear") //追加
array5 += ["eggs"]
array5.insert("waxberry", atIndex: 0)
array5.insert("watermelon", atIndex: 2)
array5.insert("lemon", atIndex: array5.count)//插入
print(array5)



![屏幕快照 2016-08-06 下午2.13.36.png](http://upload-images.jianshu.io/upload_images/2670573-13db84c22e82baf6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

var array5 = ["waxberry", "strawberry", "watermelon", "pear", "eggs", "lemon"]
array5.removeAtIndex(4)
array5.removeFirst()
print(array5)
array5.removeAll()
print(array5)

6.数组的复制

var array7 = ["apple","orange","banana"]
var array9 = array7
array9[0] = "pitaya"
print(array9)
var array10 = array9[1...2]
print(array10)
let array11 = array9 + array5
print(array11)


例1//用数组输出斐波拉契数列

var fibArray = [Int](count: 20, repeatedValue: 0)
fibArray[0] = 1
fibArray[1] = 1
for i in 2.. fibArray[i] = fibArray[i - 1] + fibArray[i - 2]
}
//1.
for (index,value) in fibArray.enumerate(){
print("(index + 1).(value)")
}
//2.
for i in 0.. print(fibArray[i])
}
//3.
for num in fibArray{
print(num)
}

例2:简单选择排序:每次从剩下的元素中找最小的元素放到对应的位置上

for i in 0.. var minIndex = i
for j in i + 1.. if array[j] < array[minIndex]{
minIndex = j
}

}
(array[i],array[minIndex]) = (array[minIndex],array[i])

}
print(array)

例3:冒泡排序:

for i in 0.. var swapped = false //当前这轮没有发生过两两交换
for j in 0.. if array[j] > array[j + 1]{
(array[j],array[j+1]) = (array[j+1],array[j])
swapped = true
}
}
//没有发生过两两交换则终止循环
if swapped == false{
break
}
}
print(array)


##三、App制作
由于开发过程细节较多,这里举一个简单的例子来介绍可视化开发过程:
1.首先你要建一个ios application的工程,工程建好后,工程文件夹是这样的


![屏幕快照 2016-08-06 下午2.40.33.png](http://upload-images.jianshu.io/upload_images/2670573-b2bc09a7d70ce826.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.我们在Main.storyboard(主故事板)目录构建app用户界面
比如我们要做一个用户登录的界面,如下图:


![屏幕快照 2016-08-06 下午2.46.19.png](http://upload-images.jianshu.io/upload_images/2670573-c376c58c65d8d0c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
首先点击屏幕上方的ViewController打开属性检查器,调整size即屏幕尺寸,最右上那三个框可以打开左右和底部边栏。然后点击对象库,选中你需要添加的对象,拖动到屏幕上就添加到用户界面上了,现在我们添加的是两个text(文本框)和一个按钮(button)。
3.添加完毕后打开辅助编译器,如下图:


![屏幕快照 2016-08-06 下午3.08.35.png](http://upload-images.jianshu.io/upload_images/2670573-ec451a70fc9fd2fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

根据图上的方法,把对象拖到右边松开ctrl键是这样的


![屏幕快照 2016-08-06 下午3.16.01.png](http://upload-images.jianshu.io/upload_images/2670573-0092f66b3ffe8788.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
点击connection,可以展开几个选项text就选Outlet,button选择Action,将三个对象都添加完毕后就可以在相应对象代码里面写事件代码了。

import UIKit

class ViewController: UIViewController {
override func viewDidLoad() {
}
@IBOutlet weak var admin: UITextField!
@IBOutlet weak var password: UITextField!
@IBAction func loginButton(sender: AnyObject) {
//自动去掉文本框里的空格
admin.text = admin.text!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
let userName = admin.text!
let passWord = password.text!
//三元条件运算符
let msg = userName == "admin" && passWord == "123456" ? "登陆成功!" : "非法用户!"
let alertController = UIAlertController(title: "温馨提示", message: msg, preferredStyle: .Alert)
let loadAction = UIAlertAction(title: "确定", style: .Default, handler: nil)
alertController.addAction(loadAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
//一触摸屏幕就执行函数
override func touchesBegan(touches: Set, withEvent event: UIEvent?) {
if admin.isFirstResponder(){
admin.resignFirstResponder()
}
if password.isFirstResponder(){
password.resignFirstResponder()
}
}
}

4.在模拟器上运行效果

![屏幕快照 2016-08-06 下午3.26.36.png](http://upload-images.jianshu.io/upload_images/2670573-3ff86abe01b0b40d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

你可能感兴趣的:(Swift学习总结)