本文对Swift做一个从OC的角度的基础知识简单概要。

Swift OC 说明
let、var const 在OC中不用const声明的常量,都认为是变量
Float、Double CGFloat  
Int NSInteger  
String NSString  
Bool BOOL OC中的非1为flase,1为ture在Swift中不适用
Array NSArray  
Dictionary NSDictionary  
Set NSSet  
Tuple -  
Optional -  
nil nil Swift中的nil和OC中的含义不一样
if语句 if语句 if语句的语法写作不一样,尤其是Swift中if嵌套简写
try..throw - OC中没有采用抛异常处理机制
assert NSAssert  

以下的概念,先要有个印象:

1、声明常量用let、声明变量用var

·常量的值一旦设定就不能改变,而变量的值可以随意更改

let a = 10

var b = "hello, world!"

2、类型标注

·通过上面的例子可以看出,声明常量和变量的时候,可以不标注常量或者变量的类型,这是因为Swift的「类型安全和类型推断」功能,可以通过声明常量或者变量的时候赋的初始值推断出这个常量或者变量的类型。

·如果没有赋初始值又想表明该常量或者变量的类型,就的用“: 类型名”的方式标注类型

var welcomMessage : String

3、常量和变量的命名

·命名方面跟OC一样

4、输出常量和变量

·OC语言上使用的是NSLog,Swift使用print(_:separator:terminator:)函数

print(welcomeMessage)

·这个输出函数默认结尾换行,如果不想换行,将空字符串作为terminator的参数传入即可

print(welcomeMessage, terminator:"")

·输出时的拼接采用将常量或者变量放入圆括号中,并在做括号前使用反斜杠将其转义的方式

print("Please speak \(welcomeMessage)")

5、注释

·采用跟OC一样的方式

6、分号

·与OC不一样,Swift不强制使用分号

·如果打算在同一行内写多条独立的语句,那就要使用分号

7、整数与浮点数

·OC使用的NSInteger,Swift使用Int

·OC使用的NSUInteger,Swift使用UInt

·OC使用的CGFloat,Swift使用Double(64位浮点数)、Float(32位浮点数)

8、类型安全和类型推断

·进行类型检查是在编译时期

·浮点型推断成Double而不是Float

·类型安全到Int数值无法跟Double数值直接相加的地步,此时需要使用「数值型类型转换」

9、数值型字面量

·整数字面量:十进制、二进制、八进制、十六进制

·浮点字面量:十进制、十六进制

10、数值型类型转换

·数值型一般使用Int

·Int8和Int16之间不能直接进行计算,需要采用Int16(Int8的数值)进行转换

·整数和浮点数不能直接进行计算,需要采用类似于Double(Int的数值)进行转换

11、类型别名,使用typealias关键字

typealias AudioSample = UInt16

12、布尔值

·Swift采用的是Bool(包括ture和false)

·与OC中的BOOL不一样的是,OC中1代表ture,非1代表false。但是在Swift中的类型安全机制下1不能代表ture

let i = 1

if i {

  //这个例子不会通过编译,会报错

}

13、元组tuples

·元组是在Swift语言中出现的一种数据类型,在OC中并没有

·元组的出现,尤其在函数返回值时,元组非常有用。在OC中没有元组的概念,一般需要使用数组或者字典或者自定义类型来达到同样的目的

let http404Error = (404, "Not Found")

// http404Error的类型是(Int, String),值是(404, "Not Found")

let (statusCode, statusMessage) = heet404Error

print("The status code is \(statusCode)")

// 可以将以一个元组的内容分解成单独的常量和变量,然后就可以正常的使用它们了

let (justTheStatusCode, _) = http404Error

print("The status code is \(justTheStatusCode)")

// 如果只需要一部分元组值,分解的时候可以把要忽略的部分用下划线( _)标记

print("The status code is \(http404Error.0)")

// 可以通过下标来访问元组中的单个元素,下标从0开始

let http200Status = (statusCode:200, description: "OK")

print("The status code is \(http200Status.statusCode)")

// 在定义元组的时候可以给单个元素命名后,通过名字来获取这些元素的值

14、可选类型optionals

·可选类型在OC中没有出现过,在OC中与可选类型最接近的一个概念就是nil。在OC中nil表示“缺少一个合法的对象”,但是nil表示的是对象。对于结构体、基本的C类型或者枚举类型,OC一般使用比如NSNotFound来暗示值的缺失。

·但是在Swift中的nil与OC中的概念是不一样的,在OC中nil指向不存在对象的指针,在Swfit中nil不是指针,他是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil,不只是对象类型。并且在Swift中nil不能用于非可选类型的常量和变量。如果代码中有常量或者变量需要处理值缺失的情况,那么将它们声明成对应的可选类型。

·可选类型可以做作类型表明也可以作为类型推断出的类型,比如下面的代码

let possibleNumber = "123"

let convertedNumber = Int(possibleNumber)

// 并不是所有的String类型都能够转换成Int型,如果转换不成功的时候返回的就是nil。所以这种情境下,SwiftUI推测convertedNumber的类型是Int?

var serverResponseCode: Int? = 400

// serverResponseCode包含一个可选的Int值404

serverResponseCode = nil

// serverResponseCode现在不包含值

var surveyAnswer: String?

// 如果在声明一个可选常量或者变量的时候没有赋值,它们会自动被设置为nil

15、nil在if语句中的使用及强制解析

·使用相等(==)或者不等(!=)来判断一个可选值是否包含值。

·如果确定一个可选类型包含值,可以使用在可选的名字后面加一个感叹号(!)来获取值。

if convertedNumber != nil {

  print("convertedNumber has an integer value of \(convertedNumber!).")

}

16、可选绑定

·可选绑定可以用在if和while语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。

·关于在if语句中完成可选绑定在代码上并不复杂,但是if语句和OC的不一样需要注意下

if let actualNumber = Int(possibleNumber) {

  var accountNumber = actualNumber + 12

} else {

  print("\'\(possibleNumber)\' could not be converted to an integer")

}

// 这里需要注意的是,其一actualNumber只用在后面的可选类型有值的情况下才创建并赋值,如果不存在,actualNumber常量不会被创建;其二,actualNumber只是临时常量,只有在if的body分支中可以使用。

·另外就是if的嵌套使用在Swift语法中需要的代码更加简洁,下面两种代码表述是一样的:

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {

  print("\(firstNumber) < \(secondNumber) < 100")

}

if let firstNmuber = Int("4") {

  if let secondNumber = Int("42") {

    if firstNumber < secondNumber && sectondNumber < 100 {

      print("\(firstNumber) < \(secondNumber) < 100")

    }

  }

}

17、隐式解析可选类型

·有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次又要判断和解析可选值是非常低效的,因为可以确定它总会有值。这种类型的可选状态被定义为隐式解析可选类型。如果在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和在没有值的普通可选类型后面加一个感叹号一样。因此,仍然可以把隐式解析可选类型当作普通可选类型来判断它是否包含值。

let possibleString: String? = "An optional string."

let forcesString: String = posssibleString!//需要感叹号来获取值

let assumedString: String! = "An implicitly unmrapped optional string."

let implicitString: String = assumedString//不需要感叹号

if assumedString != nil {

  print(assumedString)

}

18、错误处理

·OC中并没有使用try...throws...catch...的抛出异常处理的机制,Swift这次把它加进来了

func makeAsandwich() throws {

  //...

}

do {

  tyr makeASandwich()

  eatASandwich()

} catch SandwichError.outOfCleanDishes {

  washDishes()

} catch SandwichError.missingIngredients(let ingredients) {

  buyGroceries(ingredients)

}

19、断言

·在OC中也是有断言(使用的是NSAssert),Swift中使用assert

·当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:

  ·整数类型的下标索引被传入一个自定义下标实现,但是下标索引值kennel太小或者太大

  ·需要给函数传入一个值,但是非法的值可能导致函数不能正常执行

  ·一个可选值现在是nil,但是后面的代码运行需要一个非nil值

Swift3.0-基础知识的更多相关文章

  1. swift3.0基础语法

    swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...

  2. Swift3.0 基础学习梳理笔记(一)

    本篇是我在学完一遍基础语法知识的时候,第一遍复习,我一遍梳理一遍记录的笔记.同时分享给像我一样在学习swift 的猿友们. 本篇可能过于冗长.所以所有的参考资料都分模块的写在palyground 里, ...

  3. swift3.0基础语法(2)

    变量/常量,元组声明 var aaa = 0;//声明变量aaa 首次赋值时自动解析为Int类型 var aaa:Int = 0;//声明Int类型变量aaa let aaa = 0;//声明常量aa ...

  4. vue2.0基础知识,及webpack中vue的使用

    ## 基础指令 ## [v-cloak]{         Display:none;     }     <p v-cloak>xx{{msg}}xx</p> //解决闪烁问 ...

  5. Swift3.0基础语法学习<二>

    对象和类: // // ViewController2.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © ...

  6. OpenGL ES 3.0 基础知识

    首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...

  7. 在Eclipse在使用JUnit4单元测试(0基础知识)

    自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数.这些函数的功能可能非常强大,但我们在 ...

  8. swift3.0 基础练习-构造对象并按要求进行排序(struct)

    struct练手 构造10个学生(要求有学生的姓名.数学成绩.英语成绩),按照学生英语和数学平均分的成绩从小到大输出学生的姓名.数学成绩.英语成绩及平均分 创建一个学生构造体,包含 姓名 name 数 ...

  9. Swift3.0基础语法学习<一>

    // // ViewController.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © 2016年 ...

  10. Swift3.0基础语法学习<五>

    异常处理: // // ViewController5.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/16. // Copyright © ...

随机推荐

  1. [蓝桥杯][基础训练]FJ的字符串

    Description FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其中的规律 ...

  2. ACM的探索之Just Skip The Problem

    -----------------心怀虔诚,奋勇前进,fighting!!!!!! Problem Description: inclusively:          包括一切地;包含地 simul ...

  3. GIT分布式代码管理系统

    1:GTI介绍及使用 环境搭建: 服务器 IP地址 主机名 角色 Centos7.5 192.168.200.113 gitserver GIT服务器 Centos7.5 192.168.200.11 ...

  4. 使用Docker搭建Spark集群(用于实现网站流量实时分析模块)

    上一篇使用Docker搭建了Hadoop的完全分布式:使用Docker搭建Hadoop集群(伪分布式与完全分布式),本次记录搭建spark集群,使用两者同时来实现之前一直未完成的项目:网站日志流量分析 ...

  5. Ubuntu执行sudo apt-get update报错E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁

    一.强制解锁,执行语句 sudo rm /var/lib/apt/lists/lock 二.终端输入 ps -aux | grep apt-get 查看一下apt-get的相关进程.然后sudo ki ...

  6. The Preliminary Contest for ICPC Asia Shenyang 2019 C Dawn-K's water (完全背包)

    完全背包为什么要取到M,可以取到2*M嘛,这题需要整取,对于不能整取的背包容量,dp[k]=INF,以及dp[j-water[i].weight]=INF时,dp[j]也不需要更新.如果不整取的话,后 ...

  7. jvm系列(一)之内存模型

    JVM内存结构 Java内存模型是指Java虚拟机的内存模型,我们来看下Java内存模型的图片: VM内存模型主要分为三块:Java 堆内存(Heap).方法区(Non-Heap).JMV栈(JVM ...

  8. 公用技术——面向对象领域——UML图——《The Unified Modeling Language User Guide》V2读书笔记——第一章节(建模的意义)

    第一章节到第三章节介绍UML的基本概念.第一章节主要介绍了UML语言的历史,介绍了建模的重要性(狗窝,房子,大厦),介绍了UML要实现哪些目标,在最后介绍了在使用UML语言时应该遵循的一些原则或者是规 ...

  9. 老段带你学鸟哥Linux视频教程 包含基础班+提高班

    老段带你学鸟哥Linux视频教程 包含基础班+提高班,附带pdf文档. 目录结构如下: 目录:/-老段带你学鸟哥Linux视频教程 [.9G] ┣━━老段带你学鸟哥-服务器篇 [1009.4M] ┃ ...

  10. spring security 方法权限使用

    前面我们讲过了使用<security:intercept-url>配置url的权限访问,下面我们讲解一下基于方法的权限使用默认情况下, Spring Security 并不启用方法级的安全 ...