swift学习(二)--基本运算符、字符串、集合操作
在这一篇博客里面,我想要介绍一下swift里面一些常用的基本运算符,还有涉及到的字符串,集合操作。你会发现在swift里面还是有许多其他语言所不具有的特性运算操作的。
首先最基本的+,-,*,/,>,<,>=,<=,==,!=,||,&&,这些最基本的运算符用法跟其他语言里面可以说是一模一样的,在这里就不想多做介绍了。让我们来挑一些特性的东东说一说吧!就拿%来开刀吧!你可能就想问了,求余运算符这有什么稀奇的,难道其他语言里面没有吗?是有的,但是在swift里面如果我们进行如下的操作:8%2.5会得到什么呢?之前一直没有注意这个问题,在swift里面我们会得到一个float类型的余数,在其他语言还没有测试过。
接下来让我们来说一说元组操作吧!比如:
var testTuple=(10,"xiao");
var testTuple2=testTuple;
我们是不是可以直接进行这样的赋值操作呢?如果可以的话,元组是进行值传递的呢?还是进行引用传递的呢?答案是元组是进行值传递的,所以我们进行上面的赋值操作的时候,得到的应该是一个复制的副本了。在swift里面我还发现如下运算符:“..”,"...",没错就半闭包运算符和闭包运算符,那么有什么区别呢?又是怎样使用的呢?
var index:Int;
for index in 1..10{
println(index);
}
我们会得到什么结果呢?如果我们进行如下操作:
var index:Int;
for index in 1...10{
println(index);
}
又会得到什么结果呢?答案是下面的操作会多输出一个10,说到这里我想你应该就明白了,闭包就是包括最后的那个元素,而半闭包则不包括最后的元素。
好了,让我们转到字符串这块了,首先我想说的一点就是:在swift里面String类型是值类型,是不是跟你在其他语言里面的认知观念有点不同呢?我们可以进行如下的测试进行验证:
var origionStr="xiao";
var newStr=origionStr;
newStr="cai";
println(origionStr);
println(newStr);
如果origionStr和newStr不相同的话,是不是就说String是一个值类型了,反之就是引用类型了。
在swift里面针对String类型操作,提供了很多有用的方法:isEmpty(判断字符串是否为空),hasPrefix(判断一个字符串的前缀),hasSuffix(判断一个字符串是否拥有某某后缀),uppercaseString(转换成大写),lowercaseString(转换成小写).在String里面还有一个有趣的东东,如下:
var testStr="xiaocai";
for codeUint in testStr.utf16{
println(codeUint);
}
这是干什么呢?其实这是获取testStr的16进制的遍历属性,当然8进制也是可以的。
好了,字符串就说到这里了,让我们来看一看集合操作吧!首先是数组(Array),我们可以有以下定义方式:
var testArray:String[]=["xiao","cai"];
var testArray2=["xiao","cai"]; //利用Swift提供的推断功能
var testArray3=Int[](); //创建一个Int类型的数组
var testArray4=Array(count:3,repeatedValue:2.5); //利用swift的推断功能,创建一个Double类型,长度为3,默认值为2.5的数组
var testArray5=Double[](count:3,repeatedValue:0.0); //创建一个Double类型,长度为3,默认值为0.0的数组
当我们定义好一个数组,我们可以使用count属性访问数组的长度,还可以使用isEmpty判断数组是否为空。现在我们来想一个问题:如果我们想要在上面定义的testArray后面添加元素怎么办呢?我们可以使用append或者+=:
testArray.append("hello"); 或者
testArray+="hello"; //添加单个元素
testArray+=["hello","world"]; //添加多个元素
上面这些方法都默认在数组的最后面添加元组的,那么在swift里面如果我想要在制定的索引上面添加元素应该怎么办?insert(atIndex:)方法可以很好的帮我们实现这个功能:
testArray.insert("hello",atIndex:1); //在索引为1的位置插入一个元素
如果现在我们想要访问testArray里面的元素应该怎么办呢?可以直接使用索引:
var arrayValue=testArray[0]; //得到索引为0的值
testArray[0]="你好"; //修改索引为0的值
testArray[0...2]=["小蔡","学习","swift"]; //同时修改0,1,2索引出的数值
当我们建好一个数组之后,我们也可以调用:removeLast,removeAtIndex这两个方法移除元素,相信看到方法你也应该想到这两个方法有什么区别了吧!
好了让我们来讲一讲数组的遍历吧!你可能会觉得很小儿科,但是在swift里面相比较我们熟悉的一些语言在语法书写格式上面还是有一些区别的,如果现在我们想要遍历上面定义的testArray数组应该怎么做呢?
var item:String;
for item in testArray{
println(item);
} //好吧,这是通常的做法,但是你有没有注意到for语句并没有括号,同时它使用的是类似于c#里面的foreach语言结构
让我们再来加加压,如果我在遍历的同时不止想要得到value,我还想要得到index应该怎么做呢?想想其他语言里面的做法,在c#里面,你应该会有如下的做法:
string[] testArrayForCSharp={"hello","world","xiao","cai"};
for(int i=0;i<testArrayForCSharp;i++)
{
Console.Writeln(i+testArrayForCSharp[i]);
}
在swift里面将会更加的直接:
for (index,value) in enumerate(testArray){
println(index+value);
}
直接调用enumerate将数组拆分成index和value的元组,然后在元组里面我们就可以拿到index和value了。
好了,数组就说到这里了,让我们来看一看字典(Dictionary)吧!首先让我们来看一看在swift里面字典应该怎样定义呢?
var testDic=Dictionary<String,String>(); //创建一个空字典
var testDic2:Dictionary<String,String>=["key1":"value1","key2":"value2"]; //定义一个key为String类型,Value为String类型的字典
var testDic3=["key1":"value1","key2","value2"]; //利用swift的推断功能,定义一个key和value都为String类型的字典
下面让我们来想一想,在swift里面访问一个字典会怎么做呢?方法一:
testDic["Key1"]="hello"; //直接利用key来访问字典,并且修改value
方法二:利用swift提供的updateValue(forKey:)方法
testDic. updateValue("xiaocai",forKey:"key1"); //将key1位置的value修改为”xiaocai“
但是这个方法会返回一个可选的类型,这个时候我们需要利用可选绑定进行操作:
if let result= testDic. updateValue("xiaocai",forKey:"key1"){
println("Successed");
}
else {
println("failed");
}
还有removeValueForKey方法(移除指定key上面的value),也是返回一个可空类型,需要进行可选绑定。
接下来,让我们看一看应该怎样遍历一个字典呢?如果我们想要遍历上面定义的testDic,应该怎么做呢?
for (key,value) in testDic{
println(key+value);
} //直接利用元组得到key和value,没有错跟上面数组的一种方式是一样的
如果我只想要得到testDic里面的key集合或者只想要得到value集合呢?
for key in testDic.keys{
println(key); //得到key
}
for value in testDic.values{
println(value); //得到value
}
let keyArray=Array(testDic.keys); //直接获取key的数组,并将其赋值给另外一个常量
let valueArray=Array(testDic.values); //直接获取value的数组,并将其赋值给另外一个常量
好了这一篇就讲这么多了,如果有时间的话,后续更新中(保留版权和著作权)。
swift学习(二)--基本运算符、字符串、集合操作的更多相关文章
- Swift 学习- 03 -- 基本运算符
// 运算符是检查,改变,合并值的特殊符号或短语, // swift 支持大部分标准的 C语言的运算符, 且改进许多特性来减少常规编码错误. /* 如: 赋值符 (=) 不返回值, 以防止把想要判断相 ...
- Python学习笔记五:字符串常用操作,字典,三级菜单实例
字符串常用操作 7月19日,7月20日 ,7月22日,7月29日,8月29日,2月29日 首字母大写:a_str.capitalize() 统计字符串个数:a_str.count(“x”) 输出字符, ...
- swift学习初步(三)--控制流操作
在上一篇博客里面,我谈到了swift里面的一些基本类型以及相关的操作,相信你看了之后一定会觉得其实swift也不难嘛.好吧,这篇博客里面要谈的一些高级操作,可能会让你有点头疼了. 好了,废话不多说了, ...
- swift学习二:基本的语法
声明本文转载自:http://www.cocoachina.com/applenews/devnews/2014/0603/8653.html Swift是什么? Swift是苹果于WWDC 2014 ...
- Python3学习之路~2.6 集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 >>> list1 = ...
- Swift学习二
// 定义枚举方式一 enum Season { // 每个case定义一个实例 case Spring case Summer case Fall case Winter } // 定义枚举方式二 ...
- Swift学习 --- 2.3和字符串
1.创建一个空字符串,并通过推理的字符串是空的 <span style="font-size:18px;"> var str = "" var st ...
- (二)Redis字符串String操作
String全部命令如下: set key value # 设置一个key的value值 get key # 获取key的value值 mset key1 value1 key2 value2 ... ...
- Python小白的发展之路之Python基础(二)【字符串、列表、集合、文件操作】
列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1.列表.元组操作 (1)列表 列表是可变的(mutable)——可以改变列表的内容,这不同于字符串和元组,字符串和元组都是不 ...
随机推荐
- 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 超时怎么办? ...
- java中HashMap的用法
重点介绍HashMap.首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.在下文中会 ...
- Hibernate 问题,在执行Query session.createQuery(hql) 报错误
在配置文件中加入 <prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classi ...
- js对象的相关操作方法
//在js的对象中可以直接将一个方法赋值给一个属性,这种方法非常好用. //在js中虽然没有像其他语言中的class关键字,但是我们也可以用函数,字面量的方式来模拟. var myHome={ nam ...
- 解决 FastReport 使用存储过程 找不到临时表问题
在存储过程最开始加入:以下命令就可以了 SET FMTONLY OFF 有时候在执行SQL查询语句时,仅仅需要知道检索的元数据,而不是具体的数据行,可以设置SET FMTONLY ON. SET FM ...
- EnCase v.s. FTK - find out Chinese characters writing in different direction
A friend of mine said to me that she could fool those forensic tools easily by changing writing dire ...
- poj1008_Maya_Calendar
历法的转换. #include <stdio.h> #include <math.h> #include <string.h> ][]={ "pop&qu ...
- boost:进程管理
概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...
- 设置peoplecode trace
Configuring PeopleCode Trace Select PeopleTools, Utilities, Debug, Trace PeopleCode to access the Tr ...
- 显示或隐藏一个Grid
The Rowset class contains two methods that can be used to show and hide all rows: ShowAllRows() Hide ...