Swift 1小时速学教程

本文由 张渊杰 (网名寂静)编写

Swift 1小时速学教程

写在前面的话

有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了

要想在1小时内学会swift, 你要有一个前提和一个目标, 前提就是你已经熟练掌握了任何一门面向对象的语言, 并且用它来开发过项目, 而树立的目标不是完全掌握这门语言, 而是学会基本的使用, 并且使用它写一个小项目, 这才是这个教程的终极目的.

学习其实是体验, 学习其实是思考, 学习其实是验证, 学习终归需要实践, 总归要解决现实中的问题, 好了, 让我们开始吧

注意: 本教程适用于 已经掌握了C++,Objective-C, PHP等面向对象编程语言并使用这些语言编写过项目的人

概览

  • 基本输出
  • 变量和常量
  • 运算符和表达式
  • 选择语句
  • 循环语句
  • 数组
  • 字典
  • 函数
  • 字符串
  • 结构体
  • 枚举
  • 类的定义
  • 类的初始化
  • 类方法
  • 类的继承
  • 类的扩展
  • 类的协议 - 实现一个代理

1. hello world

实例1: 输出hello world

让我们来写一个最简单的swift程序吧!

//使用print函数输出hello world
print("hello world")

说明:
使用//和/**/注释语句, 语句后面的";"加上可以, 不加也可以

2. 变量定义

实例1: 计算圆的面积

使用var可以定义变量, 使用print可以输出

//使用var定义变量, 变量类型会使用自动推导, 如果没有初始化, 必须指定类型
var a = 10
var b = 20
var c = a+b

//字符串中的\(c)表示输出的时候替换为c的值
print("a = \(c)")

实例2: 变量类型和转化

//4种常用类型
var n1:Int
n1=10;
var n2:Double = 10.23;
var n3:Character = "A";
var n4:String = "AB"


//类型转换
var v5 = 10.2
var v6 = 3
//直接写, 有语法错误
//var v7 = v5 + v6

//swift是类型安全的语言, 整数和小数不能直接计算, 需要转化为同一种类型
var v7 = v5 + Double(v6)
print("v7 = \(v7)")

3. 运算符和表达式

实例1: 计算圆的面积

let pi = 3.14159
var r = 10
var area = Double(r) * Double(r) * pi
print("area = \(area)")

说明: swift是类型安全的语言, 整数和小数不能直接计算, 需要转化为同一种类型

4. 选择语句

实例1: 判断成绩是否及格

//定义成绩
var score = 67

//swift中选择与OC十分相似
if(score>=60)
{
    print("及格")
}
else
{
    print("失败")
}

5. 循环语句

实例1: 计算1-100的和

var sum = 0

//swift的循环使用for实现, 与oc相似, 但是循环变量使用var定义
for(var i=1; i<=100; i++)
{
    sum += i
}
print("sum = \(sum)")

6. 数组

实例1: 存储5个人的年龄, 计算平均值


// 使用 [] 定义数组
var ages = [23,24,12,43,32]

//使用ages[0]形式获取数据
print("第一个人年龄 \(ages[0])")

//使用count属性获取数组个数
print("数组元素个数 \(ages.count)")

var sum = 0.0
for(var i=0; i<ages.count; i++)
{
    sum += Double(ages[i])
}
var average = sum / Double(ages.count)
print("avg = \(average)")

7. 字典

实例1: 存储5个人的年龄, 计算平均值


//使用[]定义字典
var dict = ["sid":"0805",
            "name":"zhangsan",
            "score":89]
var name = dict["name"]

//获取出的可能是nil, 建议做判断
if(name != nil)
{
    //name!语法表示name可能为nil, 可能是数据, 取到真实的数据
    print("name = \(name!)")
}

//遍历的语法
for (key,value) in dict
{
    print("\(key) -> \(value)")
}

8. 函数

实例1: 定义一个基本函数(没有参数和返回值)

//定义一个基本函数
func basic()
{
    print("hello")
}

//执行这个函数
basic()

实例2: 带参数和返回值方法

//swift是类型安全语言, 参数需要指明类型
func sum(let x:Int,let y:Int) -> Int
{
    return x+y;
}

//执行函数
var n = sum(10, y: 10)
print("n = \(n)")

9. 字符串

实例1: 定义字符串, 输出

//定义字符串并输出使用
var s = "hello"

//输出字符串
print("s = \(s)")

//统计字符个数
print("s = \(s.characters.count)")

实例2: 字符串合并

//合并
var s1 = "hello "
var s2 = "world"

//可以直接使用 + 合并两个字符串
var s3 = s1 + s2
print("s3 = \(s3)")

实例3: 获取子串

var s4 = "day day up"
var subString = s4.substringFromIndex(s.startIndex.advancedBy(4))
print("s4 = \(subString)")

10. 结构体

实例1: 定义一个结构体, 定义变量, 使用属性

//定义一个结构体, 注意, 其中数据如果不指定类型, 需要初始化
struct Person
{
    var name = ""
    var age = 0
}

//创建结构体对应变量
var zhsan = Person()

//使用结构体的属性
zhsan.name = "zhangsna"
zhsan.age = 10

11. 枚举

实例1: 定义一个枚举, 使用这个枚举

//定义一个枚举, 其中的值使用case定义
enum Week
{
    case 周一
    case 周二
    case 周三
    case 周四
    case 周五
    case 周六
    case 周日
}

//获取和使用枚举的值
print("1-> \(Week.周一)")

12. 类的定义和使用

实例1: 定义一个类, 创建对象, 使用属性和方法

//使用class定义类
class Dog {
    var nickname = ""
    var age = 0
    
    //使用func定义方法
    func show()
    {
        //方法中使用self引用对象本身
        //print("name = \(self.nickname), age = \(self.age)")
        
        print("name = \(nickname), age = \(age)")
    }
}

// 使用" 类() "格式创建对象
var dog = Dog()

//使用对象的属性
dog.nickname = "ahua"
dog.age = 4

//使用对象的方法
dog.show()

13.类的初始化

实例1: 添加两个初始化方法, 并利用这两个方法初始化类

class Car
{
    var type = ""
    var speed = 0.0
    
    //定义默认的初始化类
    init()
    {
        
    }
    
    //定义带参数的初始化类
    init(let type:String,let speed:Double)
    {
        self.type = type
        self.speed = speed
    }
}

//创建的同时初始化
var car = Car(type:"mini",speed: 100)
print("name = \(car.type)")

14. 类的类方法

实例1: 定义和使用类方法

class Math
{
    static func add(let x:Int, let y:Int) -> Int
    {
        return x+y;
    }
}

var num = Math.add(10, y: 20)
print("n = \(num)")

15. 类的继承

实例1: 定义类, 继承一个类


//定义的父类
class Car
{
    var type = ""
    var speed = 0.0
    
    //定义默认的初始化类
    init()
    {
        
    }
    
    //定义带参数的初始化类
    init(let type:String,let speed:Double)
    {
        self.type = type
        self.speed = speed
    }
}

//定义子类FlyCar, 继承父类
class FlyCar : Car
{
    var flySpeed = 0.0
    func fly()
    {
        print("fly with \(flySpeed)")
    }
}

//创建对象使用
var fc = FlyCar()
fc.fly()

16. 类的扩展

实例1: 定义扩展, 并且使用这个扩展


extension Car
{
    //扩展不能包括属性
    //var loadLimit = 0
    func load()
    {
        print("Load people")
    }
}

var newCar = Car()
newCar.load()

17. 协议

实例1: 定义和使用协议


//使用protocol定义一个协议
protocol TextFieldDelegate
{
    func didFinish()
}


//TextField利用协议规定delegate对应的类实现方法
class TextField
{
    var text = ""
    //?表示delegate未设置的时候为nil
    var delegate:TextFieldDelegate?
    
    func handClick()
    {
        //检测是否设置代理, 如果设置, 执行代理中协议规定的方法
        if(delegate != nil)
        {
            delegate?.didFinish()
        }
    }
}

//ViewController遵守和使用协议
class ViewController : TextFieldDelegate
{
    func viewDidLoad()
    {
        //警告
        // ariable was never mutated consider changing to let constant
        let textField = TextField()
        textField.delegate = self
        textField.handClick()
    }
    
    //实现的协议方法
    func didFinish() {
        print("编辑完成")
    }
}

有疑问有建议,如何联系我?

如果对本教程有疑问或有其他意见, 请联系 张渊杰(注于移动开发和移动培训领域, QQ598694550,邮箱quietjolt@163.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,757评论 1 10
  • Hello Word 在屏幕上打印“Hello, world”,可以用一行代码实现: 你不需要为了输入输出或者字符...
    restkuan阅读 3,132评论 0 5
  • 基础部分(The Basics) 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。 结合...
    gamper阅读 1,247评论 0 7
  • 去登山,去领略不一样的风景,去看夕阳,感受大自然的微妙。看着散步的人,有大人小孩,不知他们在谈论什么,只知道他们面...
    秋风一笑阅读 210评论 0 1
  • 一念相思茶不思 二念相思饭不想 三念相思魂不守 四念相思催人老 五念相思入膏肓 六念相思干肠断 七念相思仰天叹 八...
    坠叶无尘阅读 225评论 1 1