本文由 张渊杰 (网名寂静)编写
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)