IOS学习之路——Swift语言(1)——基本类型、运算符与逻辑控制语句

一、变量

变量标识符必须以字符包括Unicode编码字符、美元字符$、下划线_开头,不能以数字开头,不能包含空格。更不能使用关键字命名。

swift中变量的声明使用var关键字,常量的声明使用let关键字。

1 var name="Swift";
2 var version=2.2;
3 let company:String="Apple";

变量的声明:

1. 可以使用,逗号分割变量来同时声明多个变量

2. 可以使用:类型来同时指明多个变量的类型

在Mac中可以使用option键来查看指定变量的类型信息,按住option键将鼠标移动到变量之上会出现?问号,点击查看。

变量声明时不指定类型,系统会根据变量初始值来确定它的类型,这种机制叫做type inference

3. Swift语言中采用的是Unicode字符编码,所以变量命名是可以使用中文的,也可以使用表情符号(Command+Control+Space)

二、变量类型

a. 整型

整型Int分为Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

单纯定义一个Int类型的整数,会根据系统类型自动使用Int32或者Int64

max和min两个属性分别表示不同位数的整数所代表的最大值和最小值。

而整数进行运算时,如果类型不同,则需要显示进行类型转换。整型数字表示可以使用下划线_进行分割以方便代码的阅读。

var million:Int = 1_000_000;

给一个整型变量赋值时,可以使用二进制0b,八进制0o,十六进制0x,十进制等多种形式。

b.浮点型

Float, Double 区别在于Double的精度更高,一般情况下Float使用32位表示,Double使用64位表示。浮点数的表示可以使用科学计数法。

除数不能为0,但是可以为0.0

当正数除以0.0时结果为正无穷大,而负数除以0.0时结果为负无穷大。

1 var a = 1.0/0.0;  // inf = infinite
2 var b = -1.0/0.0; // -inf = - infinite
3 var c = 0/0.0;  //nan = not a number

tips: CGFloat

一种Float类型值,用于IOS开发。

1 var color:UIColor = UIColor(red: 0.2, green: 0.8, blue: 0.6, alpha: 0.8);
2 UIColor.redColor(); //得到一个红色
3 UIColor.greenColor(); //得到一个绿色

A UIColor object represents color and sometimes opacity (alpha value). You can use UIColor objects to store color data, and during drawing you can use them to set the current fill and stroke colors.

Returns a color object whose RGB values are 0.0, 1.0, and 0.0 and whose alpha value is 1.0.

c.Bool布尔值类型

类型值 true, false  注意都是小写

在条件判断语句中,并不能使用0和1这样的数字进行条件判断,Int does not conform to protocol BooleanType

在条件判断语句中,判断语句没有强制要求使用括号,同时逻辑语句必须用{}中括号括起来,即使只有一条语句。

给某个类型指定别名使用关键字typealias

1 typealias mytype=Int32;
2 var count:mytype=40;

d. 元组类型Tuple

将不同类型的数据进行整合,从而形成一个新的数据类型。有点类似于声明一个只包含属性成员的特殊对象。元组中的每一个成员的类型可以是基本数据类型,也可以是一个新的元组类型。

1 var person = ("zhangsan", 26, "male");
2 var car = ("car", 120_000, ("machine", 30_000));
3 var a : (String, Int, String);
4 var b : (String, Int, (Float, String)) = ("company", 50, (1.0, "product"));

定义一组变量用括号()括起来并赋予一个元组值,此时类似于元组的解包操作,用于将元组中的某一个值赋给某一个变量

元组中数据的访问形式采用(点语法),下标索引从0开始。当然元组的最后一种声明方式是采用key-value键值对的形式

1 var score : (chinese:Float, math:Float, english:Float, phi:Float, bio:Float) = (98.5, 105, 100.5, 95, 110);
2 println(score.chinese);
3 println("math=\(score.math)");
4 println(score.4);

如果不需要关心元组中的某个值,可以使用下划线_来代替它的变量名

1 var tuples : (x:Int, _:Int) = (5,2);
2 tuples.x
3 tuples.0
4 tuples.1

从swift2.2版本开始,元组可以进行比较。

e. 可选类型

数据类型关键字后面加上?表示可选类型,nil表示值缺失,表达的意思就是这个变量可以有指定类型的值,也可以是nil

1 var age:Int = "5.5".toInt(); // 这肯定是报错的
2 var age:Int? = "5".toInt(); // nil 值缺失

而在可选类型变量之后使用!表示告知系统,当前已经确认该变量是有值的,不会是nil

1 println(age); // {Some:5}
2 println(age!); // 5

强制类型转换!

在Swift语言中,没有隐式转换机制,一切都需要开发者进行显示类型转换。

f. 字符与字符串

字符类型:单个ASCII字符,转义字符,汉字,表情符号,unicode字符\u{n}n表示1到8位的十六进制数。字符必须用双引号括起来,字符的声明必须指定类型Character

在Swift语言中,上述表现形式都是一个字符。 区别于其他语言,上述表现形式可能要用到多个字符来表示。

字符串的创建有两种形式:

1. 直接用双引号表示

2. 通过String()构造器生成

1 var ch1 = "a";
2 var ch2 = "\n";
3 var ch3 = "\u{22}";


1 var str1 = "Swift";
2 var str2 = String("Hello, Swift");
3 var str2 = String(count: 4, repeatedValue: Character("b"));
4 var str3 = String(count: 5, repeatedValue: UnicodeScalar("\u{227}"));
5 var emptyStr1 = "";
6 var emptyStr2 = String();

字符串的拼接使用+, +=, append()方法

字符与字符串的拼接:+需要显示转换类型

append()方法重载, 该方法会改变调用者的值

string.append(c: Character);

string.append(x: UnicodeScalar);

字符串的字符个数获取使用countElements,  .characters .count

1 var str4 = "abcd";
2 println(countElements(str4));

*字符串具有uft16Count属性

*字符串具有的方法

hasPrefix(),

hasSuffix()

*字符串插值 \()

1 var x:Int = 2;
2 print("\(x)");

* print语法  Swift2.2支持 separater默认值是空格,terminator默认值是回车符

1 var a = 1, b = 2, c = 3;
2 print(a,b,c);
3 print(a,b,c, separater:"-", terminator: "!!");

* string.Index类型,定义在String类型的内部

 1 var str = "Hello, Swift";
 2 //var endIndex: String.Index
 3 var endIndex = str.endIndex;
 4 var startIndex = str.startIndex;
 5 str[endIndex.predecessor()];
 6 //Returns the previous consecutive value before `self`.
 7 str[startIndex.successor()];
 8 //Returns the next consecutive value after `self`.
 9 str[startIndex];
10 //Swift2.3
11 startIndex.advancedBy(3);

* Range类型

1 //Range<String.Index>
2 var range = startIndex..<endIndex
3 str[range];

* String API

1. replaceRange,  removeRange, removeAtIndex, insert,  append, appendContentsOf

2.  lowercaseString, uppercaseString,  capitalizedString

** NSString与String

NSString通过as关键字可以强制转换为String

var str : String = NSString(format: "one third is %.2f " , 1.0/3.0 ) as String

1 var nsstr:NSString = "one third is 0.333";
2 nsstr.substringFromIndex(4);
3 nsstr.substringToIndex(3);
4 nsstr.substringWithRange(NSMakeRange(4, 5))

三、运算符

*    % 取余运算符  余数的符号与被除数的符号一致

*    /   除法运算符

整数之间进行% /获得的都是整数

浮点数之间进行% /获得的都是浮点数

需要强制类型转换, 同时注意正数与负数的计算结果会有不同

同时注意到除数不能为0,但是可以为0.0

*    单目运算符

运算符不要与字符之间有空格

*    区间运算符

a. 全闭区间运算符  ...

b. 前闭后开区间运算符  ..<

区间运算符常常用于循环语句中,特别是循环数组时经常用到 ..< 这个前闭后开区间运算符

tips: for in 循环语句  循环索引在循环体内部是let常量

1 var c =[1,2,3,4,5];
2 for i in 0..<c.count{
3     print(i);
4 }

四、逻辑控制语句

for循环,语法: for init ; condition ; increase { statement }

while循环

repeat while循环, 其实就是其他语言中的do while循环。只是swift中do关键字用于其他功能,因此这里使用了repeat关键字

switch选择语句:与其他语言最大的区别在于swift中的case条件语句的末尾不再需要添加break语句。那么如何表示多个匹配结果同时执行某一种逻辑语句呢。

那么与其他语言中书写多个case不同,swift中只需要将多个结果写在一个case语句中,并且使用逗号,进行分割。

swith语句中的default语句不能省略掉,除非其他的case语句已经将所有可能的取值都包含进去。如何写一个空语句呢,要么使用break; 要么使用 ();

** switch高级用法

switch可以针对所有的基础类型进行选择,那么case语句中的取值可以是区间0..<60 也可以是元组 (0,0)甚至忽略元组中的某个值 (_ , 0)

fallthrough可以将选择语句的条件进行转移,即执行完上一个case语句,使用fallthrough可以开始执行下一个case语句。

 1 var point = (0,0);
 2 switch point{
 3 case (0,0):
 4     println("this is origin point");
 5     fallthrough
 6 case (_,0):
 7     println("this is a y_axis point");
 8     fallthrough
 9 case (0,_):
10     println("this is a x_axis point");
11 case (let x, let y):
12     println("other point");
13 }

***** case where之间配合实现模式匹配

1 var age = 18;
2 if case 15...20 = age where age%2==0{
3     println("your age is between 15 and 20, and age number is odd");
4 }
1 var sum = 0;
2 for case let i in 1..<100 where i%3==0{
3     sum+=i;
4 }
5 println(sum);

****** guard关键字

时间: 2024-10-06 14:34:44

IOS学习之路——Swift语言(1)——基本类型、运算符与逻辑控制语句的相关文章

IOS学习之路——Swift语言(2)——基本类型与函数

一.可选型 为什么会有可选型?当一个变量被希望表示为某一个指定的类型值,同时也被希望在某种情况下表示为空.那么就需要一个可选型.Optional 可选型的语法是在Swift的基本类型后面添加 ? 符号,如 Int? String?  可选型如果取值为空,那么表示为 nil 如果想定义一个可选型的变量,那么需要显示的声明为可选型.可选型变量打印时显示Optional 可选型变量需要进行解包(unwrap)才能与其他的变量进行运算. 解包: 1. 强制解包,使用 ! 关键字,强制解包是具有风险的,当

学习,是不断认识错误的过程 ---我的iOS学习之路

刚刚进入大学的的时候,觉得实验课上很会做实验的人很流弊,觉得只要上好实验课,就会成为一个 cua cua cua 很会写代码的人!然后就在实验课上捣鼓.捣鼓..捣鼓... 参加了社团,青协后就觉得其实会编程其实也没多大用,还是要锻炼一下自己其他方面的能力.因为呆在青协的宣传部,所以每回做活动的时候总会画海报,画呀画呀画,画呀画呀画,,,还会去参加各种各样的宣称活动,只要不是上课时间就青协和社团两边跑.嗯,感觉很充实.. 这种生活一直持续到大二,一次很偶然又很幸运的机会,经一个学长介绍,来到了一个

IOS学习之路- 运行过程

1. 执行Main函数(在main.m文件中) 2. 加载MainStoryborad.storyboard文件 * 创建ViewController文件 * 根据storyboard文件中描述创建ViewController中的UIView(父层) * 创建UIView内部的所有子控件 * 将创建好的所有UIView对象跟ViewController做相应的关联(IBAction,IBoutlet  ) 3. 将程序的第一个控制器内部的UIview显示到手机屏幕上. IOS学习之路- 运行过程

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实

IOS学习之路-- 指针&amp;宏函数

如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p

IOS学习之路--OC的基础知识

运行过程 1.编写OC程序:.m源文件 2.编译.m文件为.o目标文件:cc -c xxxx.m 3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation 4.执行a.out文件:./a.out #import 的功能跟#include一样,只是更好用,他避免了头文件的多次包含 为了能使用OC的特性, 一定要引入#import <Foundation/Foundation.h> 类定义// @implementation 和 @end // 设计(

IOS学习之路--BLOCK

/* 1.定义block变量: 返回值类型 (^block变量名) (参数类型1, 参数类型2, ....); 2.给block变量赋值 block变量名 = ^(参数类型1 参数名称1, .....) { }; */ /* 1.设置动画属性 2.开始执行动画 3.动画执行完毕 block1 = ^{ 封装了动画开始执行前想做的事情 }; block2 = ^{ 封装了动画执行完毕后想做的事情 }; */ #import <Foundation/Foundation.h> //typedef

IOS 学习之路一 正其心

进入IT行业已经有5个年头,前3年做中间件(WAS) 数据库(ORACLE)的维护,后打算深入学习数据库,做DBA,于是跳槽到一家数据公司.没做多久的数据库,公司就安排做基于 WEB 的监控,独立开发了3个监控系统,发现这是个焦油坑--正如<人月神话>所说,萌生去意.现在回想起来,了解的技术 和用过的平台虽多,但都不精,无核心竞争力.鉴于互联网发展趋势,要么去做大数据,要么到移动互联网.大数据偏学术,而移动物联网更注重 互联网的核心--连接,于是重新上路. 技术爆破 每次技术爆破都小人物的机会

Swift语言指南(九)--基本运算符

运算符(operator)是用来检查,改变或合并值的一种特殊符号或短语.例如,加号运算符让两个数字相加(如:let i = 1 + 2),还有些更复杂的运算符,如逻辑与运算符(&&)(如:if enteredDoorCode && passedRetinaScan)和自增运算符(++i)(将 i 的值加 1 的便捷写法). Swift 支持标准C语言的大多数运算符,并且改进了一些特性以规避常见的代码错误.赋值运算符(=)是没有返回值的,这样是为了避免在使用等于运算符(==)