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)
Swift语言 1小时速学教程的更多相关文章
- Swift语言Storyboard教程:第一部分
更新记录: 该Storyboard教程由Caroline Begbie更新iOS 8和Swift相关内容.原文作者为教程编纂组的成员Matthijs Hollemans. 2014/12/10更新: ...
- Swift语言Auto Layout入门教程:上篇
原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...
- 学习swift语言的快速入门教程推荐
随着苹果产品越来越火爆,苹果新推出的swift必定将在很大程度上代替oc语言.学好swift语言,对于IOS工程师来讲,已经是一门必备技能. 有一些比较好的英文版教程,值得学习. 1. Swift T ...
- swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3 注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...
- Swift语言中如何使用JSON数据教程
这是一篇翻译文章,原文出处:http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial Swift语言中如何使用JSO ...
- 苹果Swift语言中文教程资源汇总
苹果swift语言中文教程(零)搭配环境以及代码执行成功http://vjiazhi.com/kaifa/1014.html 苹果Swift语言中文教程(一)基础数据类型 http://vjiazhi ...
- Swift语言教程中文文档
Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- 快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览
快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或 ...
随机推荐
- 将list转换为json失败
估计你是用的hibernate的自动注解,并且里面有一对多,多对一的关系,这是需要在不需要的字段上加上注解@JsonIgnore, 这样的话在list转json的时候就会忽略加上@JsonIgnore ...
- ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
一般情况下点击效果都是正常的!要不然你对它做了什么?一般细心的小伙伴都没有遇到这种情况,但是呢! 当然我是二班的!在这里我主要讲两个问题,解决问题和普及魔法. 一.普及问题(button在cell上点 ...
- linux-多线程
一.什么是线程? 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立执行的基本单位.线程自己基本上不拥有系统资源,仅仅拥有一点在执行中不可缺少的资源(如程序计数器,一组寄存器和 ...
- js 获取浏览器版本号
1.在web开发中,会常常让你推断当前使用的是那个浏览器及浏览器的那个版本号,依据浏览器版本号来调整CSS的样式, 使在web界面在各个浏览器展现达到最佳的效果,以下是获取当前浏览器的代码: getB ...
- Redis学习手册(Hashes数据类型)
一.概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Ag ...
- 集合(Collection,set,list,map)
package cn.hncu.col.col; import java.util.ArrayList;import java.util.Collection;import java.util.Has ...
- DirectShow初探
filtergraphmanagernullmicrosoftdirect3d 可能到现在为止,还没有哪个玩过游戏的人没有接触过Microsoft的DirectX的.因为现今大多数的游戏都是用Dire ...
- 解决Ubuntu下sublime中不能输入中文的问题
解决Ubuntu下sublime中不能输入中文的问题 Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sub ...
- Asp.net上传出现“超过了最大请求长度”的问题解决方法
在开发ASP.NET网站后台管理系统时,我们可能会遇到这样的问题:上传大于4M的文件时,会提示错误:错误信息如下: 1.异常详细信息:超过了最大请求长度. 2.引发异常的方法:Byte[] GetEn ...
- HOOK函数(二)——全局HOOK
如果钩子函数定义于当前进程相关的线程中,则钩子函数只能处理当前进程的线程的消息,如果要想处理当前正在运行的所有进程的鼠标消息和键盘消息,那么安装钩子函数的代码必须实现在动态链接库中.所以如果想让安装的 ...