或许网络上有很多成型的介绍,我只想写下来留给自己。欢迎批评。开撸!

1、第一个程序,Hello,world!古人云,学会了Hello,world!这门语言你就掌握了一半了。

print("Hello,World!")

  已经学了这门语言的一半,你是不是很开心?刚开始写这句代码的时候,让我想起了久违的Pascal,一样的书写方式,字符串没有OC里的@来修饰。只是Pascal现在已经销声匿迹了(我一直没发现有用Pascal做开发的公司),很是怀念。现在的脑海里依稀记得04年的第一句Hello,World!

2、定义常量和变量

  swfit中,对象或数据的定义,只有两种 let 和 var。不再需要像OC里边需要指定对象的类型,例如

int i = 1;
UIView *v = UIView()

  常量定义 let i = 1;变量定义 var j = 2; j =3。Xcode里边,系统会智能判断,你定义的类型是否合理,假设你定义一个var i = 1,但再后边并没有对i 的值进行修改,那么系统会给你警示,i的定义应该用let。同样的,如果用let修饰,后边又进行了赋值操作,那么系统会给一个警告,需要用var。数据的类型是根据赋值的内容进行推导出来的。

let u = UIView()
let i = 1
let j:Double = 2
var b = UIButton()
b = UIButton(frame:frame)

  上面几行代码给出了几条语句,根据系统推断:u 是 UIView,i 是Int ,j是Double(可以在变量后边加:然后注明该变量的准确类型,此处如果不加,系统会被认定是Int类型),b是UIButton类型。

3、没有隐式的类型转换。再OC中,如下代码是可以正常编译的

Int i = 1
Double j = 2
j = j + i

  但是在Swift中,就会报错{ Binary operator '+' cannot be applied to operands of type 'Double' and 'Int'},Double 和 Int 无法操作。需要将运算符两边转换成相同的数据类型,如下述代码

let i = 1
var j : Double = 2
j = j + Double(i)

  当然,也可以将Double转成Int,注意:Double转成Int会省略小数位,并不会四舍五入

4、可选值Optional

var i : Double?

  定义一个Double类型的i,可以赋值nil。如果不加问号,就不可以赋值nil。这个特性跟C#中有异曲同工之处。该类型的是不允许直接参与计算的,需要配合符号进行运算,!强制解包计算(如果强制解包的数据是nil,程序会Crash掉),??判断如果为空的话,给出其他值。下边就上代码详细说明

var i : int?
var j : Int
j = i -----编译不会通过,系统会提示让你解包
j = i! -----将i强制解包,程序Crash
j = i ?? 2 -----如果i是nil,将2赋值给j

5、流程控制语句if else switch case ? :,不多赘述,直接看代码

let i = 100
if i < 60 {
print("不及格")
}else{
print("及格了~")
} switch i {
case 0...60 :print("不及格")
default:print("及格了")
}

switch i {
case let j where j = 60 : print("及格")
case _ where i = 60 :print("及格")
case 60 : print("及格")
default: return
}
if i<60?print("不及格") : print("及格了")

  有语言功底的,看如上代码,应该很容易理解。就不做太多的文字说明了。需要强调的一点是switch中 case中,0...60,代表从0到60的所有值。三个.哦。重点强调一下第二种switch的用法。在case中,可以生成新的变量来代替 switch里的变量,并加where来做逻辑判断,如果只要做条件判断,那么可以直接用_代替赋值部分。并且 case接受的值可以是一样的。在switch中,case无法进行穿透。

6、可选值的条件判断

var i : Int? = 100
if let j = i where i <60 {
print(j)
} guard let j = i else {
return
}

  看了上边的代码,是不是开始蒙蒙哒了,因为是新的知识点,我就多嘴说两句,首先 if let  和 guard let,只能用于可选值的判断,如果 i 是 Int类型,上述代码会报错。if let j = i ,表示,当i不为空的时候,设置 j = i,此时j 的类型就是Int类型,后边的where作为条件判断(有数据库知识的同学应该会很亲切)。括号里边执行的代码,也是当 j可以成功赋值的时候才会执行。guard和if类似,判断 i不为空的时候,赋值给 j ,不同点是,guard let后边不能直接跟括号,而是要加else {},括号里的逻辑,就是当i为nil的时候的逻辑。注意:guard let 里边的{}需要加上return

7、循环

sum = 0
for i in 0..<10 { --------0....9 两个点,加小于号,相当于三个. 注意数值的变化,三个.代表可以取到
sum += i
}
print(sum) for _ in 0...9 { ---------如果循环中未用到循环的变量,可以省略用_来代替
print("hello")
} while i < 10 {
i++
}
repeat {
i--
} while i > 10

  for循环和while循环的演示,在Swift中,repeat 代替了do 和while凑成了一对循环。看到repeat,又让我想到了Pascal中的Repeat until 循环,很是亲切。

今天先写到这里,后边我会继续补充其他的内容,希望可以跟大家一起成长。

Swift语法简介(一)的更多相关文章

  1. Swift语法简介(二)闭包

    突然看到别人写的关于Block的帖子,让我突然有一种想写一篇关于闭包的帖子.在我的认知中,Swift中的闭包,就是Object-C中的Block--(或许我的认知太浅了).先上一个闭包的简单例子 le ...

  2. ios -- 教你如何轻松学习Swift语法(三) 完结篇

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.自动引用计数   1.自动引用计数工作机制      1.1 swift和o ...

  3. ios -- 教你如何轻松学习Swift语法(一)

    目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...

  4. Swift语法入门

    正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...

  5. ios -- 教你如何轻松学习Swift语法(二)

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.可选类型(重点内容)   1.什么是可选类型?        1.1在OC开 ...

  6. freemarker语法简介

    ftl是一种模板标记语言,用于渲染数据,输入html结构.语法简介如下: ${book.name} ${book.name?if_exists} //值是否存在 ${book.name??} //值是 ...

  7. Swift翻译之-Swift语法入门 Swift语法介绍

    目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...

  8. Swift语法总结补充(一)

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...

  9. Swift语法

    Swift语法 标签(空格分隔): Swift 1.打印输出语句 println("Hello, Swift!") 注意每行代码后面无需添加分号作为结束 2.简单值 let---常 ...

随机推荐

  1. window.print() 去掉页眉页脚及打印链接【转载】

    页面中添加样式: <style media="print"> @page { size: auto; /* auto is the initial value */ m ...

  2. CentOS7安装问题及解决方案记录

    CentOS7系统已安装好: 一.我想要实现系统桌面化. 需要运行 yum 命令. 出现第一个error: 1.提示错误:can not find a valid baseurl 86_X64.... ...

  3. http 错误 500.21

    出现这个错误一般都是.net Framework 在iis中安装错误 这个时候需要重新安装iis .netframework 4.0框架 我的解决方案如下: 在cmd中以管理员身份运行->%wi ...

  4. postgres 批量更新内容

    在程序中遇到这样的需求, 数据库表格式如下 需要把批量更新status, 如name = fox 时, status = 1, name = boa 时,status = 2 .... 类似的 pos ...

  5. HFSS设计导入AD中

    具体过程有些繁琐,录制了一个视频放在百度网盘了.亲测有效. 网盘地址:http://pan.baidu.com/s/1gfIBhC3 密码:ayoa

  6. Android下载图片/调用系统相机拍照、显示并保存到本地

    package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException ...

  7. Multi-armed Bandit Problem与增强学习的联系

    选自<Reinforcement Learning: An Introduction>, version 2, 2016, Chapter2 https://webdocs.cs.ualb ...

  8. 冒泡排序和用for循环画菱形

    忘了当时刚开始学java编程时提到的冒泡排序和for循环画菱形怎么做了, 找了找以前的练习, 重新修改了一遍, 其实冒泡排序也是可以排列字符串和字符的, package com.test; publi ...

  9. 40多个纯CSS绘制的图形

    本文由码农网 – 陈少华原创,转载请看清文末的转载要求. 今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和 ...

  10. new与malloc

    首先将new与malloc的区别总结如下: 1 new可以自动计算需要分配多大的内存,而malloc必须指明. 2 new返回的指针是有类型的,malloc返回void*类型的指针. 3 new在分配 ...