Swift基本语法

写在前面的话:想深入学习Swift的朋友,推荐阅读国人翻译的《The Swift Programming Language》中文版@onevcat 写的 Swifter - 100 个 Swift 必备 Tips、参与翻译的 函数式 Swift 这两本书


1.常量 & 变量

let a = 1
print(a)

var b = 2
print(b)
b = 3
print(b)
  • 小结:
    • let定义常量,不可更改
    • var定义变量,可以更改
    • Swift语句后不用加分号";"
    • Swift中用print()代替OC中的NSlog()
    • Swift中的print()比OC中的NSlog()性能更强

2.定义对象

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        //实例化UIView对象,设置frame
        let testView = UIView(frame: CGRectMake(100, 100, 100, 100))
        //设置颜色
        testView.backgroundColor = UIColor.orangeColor()
        //添加到主视图
        view.addSubview(testView)
    }
}
  • 小结:
    • let修饰,表示testView的内存地址固定,不能修改,但是可以修改testView的内部属性,比如颜色、尺寸等
    • 访问Swift中当前对象的属性,不用写self.

Swift中,尽量使用let修饰,有必要时才使用var,可以使程序更加安全


3.数据类型

  • 小结:
    • Swift中会根据常量/变量的实际值自动推算其数据类型
    • Swift没有OC中的隐式类型转换
    • 如果需要转换数据类型,必须进行显式转换
      • 小数默认是Double类型
      • 整数默认是Int类型
      • 注意DoubleInt首字母均为大写
    • 如果要指定数据类型,可以在定义时使用 let/var 常量名/变量名: 类型 = 值

4.逻辑语句

4.1 简单的if语句
if a > 0
{
    print("Hello World")
}
  • 小结:
    • Swift中没有OC中非零即真的概念,所以逻辑判断中必须明确的写明判断条件
    • Swift中if语句的()可以省略,但{}不能省略
4.2 三目运算符
4.3 Optional(可选值)
let url = NSURL(string: "https://www.google.com")

按住alt(option)键,点击url,出现以下内容:

  • 小结:
    • NSURL后面的?表示url是可选值,即可能有值也可能没有值
    • 在世实际开发中需要对这样的值进行判断,否则编译器可能报错
    • 因为OC中没有类似机制,所以当对象没有值时程序可能直接闪退,用户体验非常不好,这是Swift比OC优雅的地方
  • 判断:
let url = NSURL(string: "https://www.google.com")
if url != nil
{
    let requesr = NSURLRequest(URL: url!)
}

//或者:
if let url = NSURL(string: "https://www.google.com")
{
    let request = NSURLRequest(URL: url)  
}

5.循环

  • 写法1:
for i in 0..< 10
{
    print(i)
}
  • 写法2:
for i in 0...9
{
    print(i)
}
  • 特殊写法:
for _ in 0...9
{
    print("Hello World")
}
  • 小结:
    • 0..<10表示0到9,不包括10
    • 0...9表示0到9
    • Swift中_表示忽略

6.数组

6.1创建数组
let array1 = ["Hello", "World", 10]
let array2 = ["aa", "bb", "cc"]
let array3 = [1, 2, 3]
let array4 = [1.1, 2.2, 3.3]

print(array1)

for obj in array1
{
    print(obj)
}

print(array1 as NSArray)
array1

array2

array3

array4

打印结果
  • 小结:
    • 如果初始化时,所有内容类型一致,择数组中保存的是该类型的内容
    • 如果初始化时,所有内容类型不一致,择数组中保存的是NSObject
6.2基本操作
拼接/合并/删除
  • 小结:
    • 如果定义数组时指定了保存对象的类型,择不能向数组中添加其他类型的内容
    • var 定义的数组是可变的
    • let 定义的数组是不可变的

7.字典


8.字符串

Swift中推荐使用String类型,原因如下:

  • 使用String的原因:
    • String是一个结构体,性能更高
      • String目前具有了绝大多数NSString的功能
      • String 支持直接遍历
    • NSString是一个OC对象,性能略差
    • Swift提供了StringNSString之间的无缝转换

9.函数

//没参数没返回值
func testFunc1() -> Void {
    print("Hello World")
}

func testFunc1_1() { //没有返回值的话‘-> Void’可以省略
    print("Hello World")
}

//没参数有返回值
func testFunc2() -> Int {
    return 1
}

//有参数没返回值
func testFunc3(a : Int) {
    print("Hello World")
}

//有参数有返回值
func testFunc4(a : Int, b : Int) -> Int {
    return a + b
}
testFunc4(1, b: 2) //调用函数时第一个形参会省略

//强制显示形参
func testFunc5(x a: Int, y b: Int) -> Int {
    return a + b
}
testFunc5(x: 1, y: 2)

//忽略形参
func testFunc6(a : Int, _ b: Int) -> Int {
    return a + b
}
testFunc6(1, 2)

10.闭包 Closure

//完整写法
let closure1 : (String) -> Void = {
    (name : String) -> Void in
    print(name)
}
closure1("Hello World")

//没有返回值的写法
let closure2 : (String) -> Void = {
    (name : String) in
    print(name)
}
closure2("Hello World")

//没有参数没有返回值的写法
let closure3 : () -> Void = {
    print("Hello World")
}
closure3()

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

推荐阅读更多精彩内容

  • 2010年7月,chirs Lattner 用一年的时间完成了swift的基本框架,于2014年6月分布, 取消了...
    张无忌_阅读 518评论 0 3
  • 常量&变量 什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用l...
    去兜风喽阅读 555评论 0 0
  • 1.新建Xocode Swift 程序 2.(基本使用) 在Swift中没有.h 和.m文件 只有一个.Swift...
    圆小米123阅读 1,628评论 0 7
  • YES 2014WWDC发布 常量和变量使用注意 在实际过程中,建议先定义常量,如果需要修改再改变为变量(更加安全...
    南冯阅读 537评论 0 0
  • 亲爱的种子们: 你们好! 本周我们进行了一次小测,课内和课外的内容各占50%,周三胡老师批完卷后,真的很伤心啊!为...
    胡喜平阅读 248评论 0 2