快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览

快看Sample代码,速学Swift语言(2)-基础介绍

Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或者Objective-C的开发经验获得一种熟悉感。Swift提供很多基础类型,如Int,String,Double,Bool等类型,它和Objective-C的相关类型对应,不过他是值类型,而Objective-C的基础类型是引用类型,另外Swift还提供了几个集合类型,如ArraySet, 和 Dictionary;Swift引入一些Objective-C里面没有的元祖类型,这个在C#里倒是有类似的,也是这个名词。 Swift语言是一种类型安全的强类型语言,不是类似JavaScript的弱类型,能够在提供开发效率的同时,减少常规出错的可能,使我们在开发阶段尽量发现一些类型转换的错误并及时处理。

常量和变量


1

2

let maximumNumberOfLoginAttempts 10

var currentLoginAttempt 0

常量用let定义,变量用var定义,它们均可以通过自动推导类型,如上面的就是指定为整形的类型。

也可以通过逗号分开多个定义,如下所示


1

var x 0.0y 0.0z 0.0

如果我们的变量没有初始化值来确定它的类型,我们可以通过指定类型来定义变量,如下所示


1

2

3

var welcomeMessageString

var redgreenblueDouble

变量的打印,可以在输出字符串中用括号包含变量输出,括号前加斜杠 \ 符号。

print(friendlyWelcome)
// Prints "Bonjour!"

print("The current value of friendlyWelcome is \(friendlyWelcome)")
// Prints "The current value of friendlyWelcome is Bonjour!"

注释符


1

2

3

4

5

6

7

8

// This is a comment.

/* This is also a comment

 but is written over multiple lines. */

/* This is the start of the first multiline comment.

 /* This is the second, nested multiline comment. */

 This is the end of the first multiline comment. */

上面分别是常规的的注释,以及Swift支持嵌套的注释符号

分号

Swift语句的划分可以不用分号,不过你加分号也可以,如果加分号,则可以多条语句放在一行。


1

let cat "??"print(cat)

整型

let minValue = UInt8.min  // minValue is equal to 0, and is of type UInt8
let maxValue = UInt8.max  // maxValue is equal to 255, and is of type UInt8

一般情况下,我们不需要指定具体的Int类型,如Int32,Int64,我们一般采用int类型即可,这样可以在不同的系统平台有不同的意义。

在32位平台,Int代表是Int32

在64位平台,Int代表Int64

浮点数字

Swift的浮点数字类型包括有Float(单精度)和Double(双精度)两个类型,Float代表32位浮点数字,Double代表64位浮点数字。

默认通过小数值推导的变量或者常量的类型是Double,而非Float。

数字文字


1

2

3

4

let decimalInteger 17

let binaryInteger 0b10001       // 17 二进制

let octalInteger 0o21           // 17 八进制

let hexadecimalInteger 0x11     // 17 十六进制


1

2

3

let decimalDouble 12.1875

let exponentDouble 1.21875e1  //科学计数法 1.21875*10

let hexadecimalDouble 0xC.3p0 // p0代表 2的0次方

上面是科学计数方式的几种方式


1

2

3

let paddedDouble 000123.456

let oneMillion 1_000_000

let justOverOneMillion 1_000_000.000_000_1

上面是使用0代替补齐签名数字,以及下划线来标识数字分割,方便阅读


1

2

3

let three 3

let pointOneFourOneFiveNine 0.14159

let pi Double(three) + pointOneFourOneFiveNine

常量 three 初始化位整形类型, pointOneFourOneFiveNine 推导为Double类型,而pi则通过Double转换推导为Double类型,这样右边两个都是Double类型,可以进行相加的运算处理了。

布尔类型


1

2

let orangesAreOrange true

let turnipsAreDelicious false

这个没有什么好讲的,就是语言默认有布尔类型提供,相对于Objective-C的非0则为True而言,布尔类型只有两个字,True或者False。

布尔类型可以用于条件判断等处理,如下


1

2

3

4

5

if turnipsAreDelicious {

    print("Mmm, tasty turnips!")

else {

    print("Eww, turnips are horrible.")

}

元祖类型

元祖类型就是组合多个值的一个对象类型,在组合中的类型可以是任何Swift的类型,而且不必所有的值为相同类型。


1

2

let http404Error = (404"Not Found")

// http404Error is of type (Int, String), and equals (404, "Not Found")

另外可以解构对应的元祖类型的值到对应的常量或者变量里面,如下代码


1

2

3

4

5

let (statusCodestatusMessage) = http404Error

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

// Prints "The status code is 404"

print("The status message is \(statusMessage)")

// Prints "The status message is Not Found"

也可以通过下划线来忽略相关的值,如下


1

2

let (justTheStatusCode_) = http404Error

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

元祖对象里面的值可以通过数字索引来引用,如0,1的属性,如下


1

2

3

4

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

// Prints "The status code is 404"

print("The status message is \(http404Error.1)")

// Prints "The status message is Not Found"

可空类型

这个和C#里面的可空类型是对应的,也就是对象可能有值,也可能没有值

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 推导类型为 "Int?", 或者 "optional Int"

Int类型的构造函数为可空构造函数,有可能转换失败,因此返回的为可空Int类型

可空类型可以通过设置nil,来设置它为无值状态


1

2

3

4

var serverResponseCodeInt? = 404

// serverResponseCode contains an actual Int value of 404

serverResponseCode nil

// serverResponseCode now contains no value

对于可空类型,如果确认它的值非空,那么可以强行解构它的值对象,访问它的值在变量后面增加一个!符号,如下所示


1

2

3

if convertedNumber != nil {

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

}

一般情况下,我们可以通过可空绑定的方式来处理这种对象的值,语句语法如下所示


1

2

3

if let constantName someOptional {

    statements

}

具体的语句如下所示


1

2

3

4

5

6

if let actualNumber Int(possibleNumber) {

    print("\"\(possibleNumber)\" has an integer value of \(actualNumber)")

else {

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

}

// Prints ""123" has an integer value of 123"

也可以多个let的可空绑定语句一起使用


1

2

3

4

5

6

7

8

9

10

11

12

13

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

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

}

// Prints "4 < 42 < 100"

 

if let firstNumber Int("4") {

    if let secondNumber Int("42") {

        if firstNumber < secondNumber && secondNumber < 100 {

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

        }

    }

}

// Prints "4 < 42 < 100"

解包可空类型可以通过!符号进行处理,一般情况如下所示进行判断


1

2

3

4

5

let possibleStringString? = "An optional string."

let forcedStringString possibleString// requires an exclamation mark

 

let assumedStringString! = "An implicitly unwrapped optional string."

let implicitStringString assumedString // no need for an exclamation mark

也可以使用可空绑定的let 语句进行隐式的解包,如下所示


1

2

3

4

if let definiteString assumedString {

    print(definiteString)

}

// Prints "An implicitly unwrapped optional string."

错误处理

函数抛出异常,通过在函数里面使用throws进行声明,如下


1

2

3

func canThrowAnError() throws {

    // this function may or may not throw an error

}

捕捉函数抛出的异常代码如下


1

2

3

4

5

6

do {

    try canThrowAnError()

    // no error was thrown

catch {

    // an error was thrown

}

详细的案例代码如下所示


1

2

3

4

5

6

7

8

9

10

11

12

func makeASandwich() throws {

    // ...

}

 

do {

    try makeASandwich()

    eatASandwich()

catch SandwichError.outOfCleanDishes {

    washDishes()

catch SandwichError.missingIngredients(let ingredients) {

    buyGroceries(ingredients)

}

断言调试

Swift提供一些标准库函数来进行断言调试,分为断言和预设条件的处理两部分。

断言调试仅仅在Debug调试模式运行,而预设条件则是调试模式和产品发布后都会运行的。


1

2

3

let age = -3

assert(age >0"A person‘s age can‘t be less than zero.")

// This assertion fails because -3 is not >= 0.


1

2

3

4

5

6

7

if age > 10 {

    print("You can ride the roller-coaster or the ferris wheel.")

else if age > 0 {

    print("You can ride the ferris wheel.")

else {

    assertionFailure("A person‘s age can‘t be less than zero.")

}

预设条件代码如下,用来对一些条件进行校验


1

2

// In the implementation of a subscript...

precondition(index > 0"Index must be greater than zero.")

原文地址:https://www.cnblogs.com/cjm123/p/8695870.html

时间: 2024-10-21 15:35:45

快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览的相关文章

详解swift和OC以及C语言的混编(不看后悔!)

前言: Swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,或者有一些第三方使用OC写的,没有swift版本,怎么办?那就使用混编.这个在IOS8后是允许的. 先简单的入手,先研究在同一个工程目录下混合使用的情况.这里主要介绍swift类中调用OC方法和swift类中调用C函数以及OC类中调用swift的函数这三种类型的混编.另外,小编也是边研究边尝试才做出结果的,因此命名并非规范命名,大

C语言register关键字—最快的关键字

register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对. 因为,如果定义了很多register变量,可能会超过CPU的寄存器个数,超过容量.所以只是可能. 一.皇帝身边的小太监----寄存器 不知道什么是寄存器?那见过太监没有?没有?其实我也没有.没见过不要紧,见过就麻烦大了.^_^,大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝旁边的小太监,小太监呢再交给皇帝同志处理.这个小太监只是个中转站

IOS开发语言Swift入门连载---基础部分

Swift >是 > iOS > 和 >OS X >应用开发的一门新语言.然而,如果你有 > C > 或者 > Objective-C > 开发经验的话,你会发现>Swift >的很多内容都是你熟悉的. Swift >的类型是在 >C >和 >Objective-C> 的基础上提出的,Int 是整型:Double 和Float 是浮点型:Bool 是布尔型:String 是字符串.Swift 还有两个有用的集合

C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html

register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你. 一.皇帝身边的小太监----寄存器 不知道什么是寄存器?那见过太监没有?没有?其实我也没有.没见过不要紧,见过就麻烦大了.^_^,大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝旁边的

【小白学C#】浅谈.NET中的IL代码

一.前言 前几天群里有位水友提问:”C#中,当一个方法所传入的参数是一个静态字段的时候,程序是直接到静态字段拿数据还是从复制的函数栈中拿数据“.其实很明显,这和方法参数的传递方式有关,如果是引用传递的话,肯定是会去静态字段直接拿值的:如果方法是以传值的方式使用参数的话,一定是从复制的栈中拿值的. 但是这位水友就是不相信这个结论(后来发现,这货整一个杠精啊!天天在群里跟人抬杠~),这个时候我忽然想到了可以反向看一下C#的IL代码,来了解一下程序运行的过程.的确,当我们对运行结果有异议的时候,可以通

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件

代码与算法集锦-归并排序+树状数组+快排+深度优先搜索+01背包(动态规划)

归并排序 求逆序数 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 首先考虑下如何将将二个有序数列合并.这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数.然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可. //将有序数组a[]和b[]合并到c[]中 void MemeryArray(int a[], int n, int b[], int m, int c

根据Unicode编码用C#语言把它转换成汉字的代码

rt 根据所具有的Unicode编码用C#语言把它转换成汉字的代码 师傅的代码: public static string UnicodeToGB(string text)         {             System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(text, "\\\\u([\\w]{4})");             i

十天学Linux内核之第九天---向内核添加代码

原文:十天学Linux内核之第九天---向内核添加代码 睡了个好觉,很晚才起,好久没有这么舒服过了,今天的任务不重,所以压力不大,呵呵,现在的天气真的好冷,不过实验室有空调,我还是喜欢待在这里,有一种不一样的感觉,在写了这么多天之后,自己有些不懂的页渐渐的豁然开朗了吗,而且也交到了一些朋友,真是相当开心啊.今天将介绍一下向内核中添加代码,一起来看看吧~ 先来熟悉一下文件系统,通过/dev可以访问Linux的设备,我们以men设备驱动程序为例来看看随机数是如何产生的,源代码在dirvers/cha