Swift学习初步(一)
前几天刚刚将有关oc的教程草草的看了一遍,发现oc其实也不像传说的那么难。今天又开始马不停蹄的学习Swift因为我很好奇,到底苹果出的而且想要代替oc的编程语言应该是个什么样子呢?看了网上的一些中文教材之后,才发现原来swift真的是太灵活,相比较之前oc语言真的是有天壤之别了。随着学习的深入,我发现自己真的喜欢上了swift,鉴于网上的教程还不是太多的缘故,我就萌生了将自己的一些学习体验写成一系列博客的想法,如果有什么不全面的地方欢迎大家来拍砖。
首先我来说说自己对于swift的第一印象吧!那就太灵活了,比如你要定义一个变量aa或者常量bb的时候,在c#里面你就需要首先知道aa/bb到底是什么类型,假如是整形的话,你会写成int aa=0;注意每条语句的后面你还需要加上一个分号,这在很多语言里面都有这个要求吧!诶,但是在swift里面你就不需要这么的麻烦了,对于变量你直接使用var关键字,对于常量你直接使用let关键字,并且在定义之前你也不需要知道该变量到底是什么类型,你所要做的就是给它赋个初始值就可以了,像var aa="cai"(当然语言后面可以加,也可以不加分号),swift就可以自己推断出当前这个aa变量是String类型的。是不是很智能呢?是不是有点脚本语言的感觉呢?是不是很像动态语言呢?别急它还有更多的惊喜呢?且看下面的这段代码:
var test="hello world";
var number=10;
var result=test+String(number);
var result2="hello world\(number)"
我现在如果问你result和result2会不会产生一样的结构呢?为什么呢?答案是它们的结构是一样的,这就是swift里面的有一个新的特性:\()可以直接将一个常量或者变量放在字符串里面输出。这只是swift新特性里面的冰山一角呢?别急,且听我慢慢道来,让我们试想这样一个问题:在其他语言里面如果要定义一个字典类型的话,你会怎么做呢?在c#里面的解决方案就是:
Dictionary<string,string> testDic=New Dictionary<string,string>();
testDic.Add("key",value);
我们首先需要去创建一个字典实例,然后再一个一个的往里面添加key和value。那么这个问题如果放在swift里面会怎么做呢?
var testDic=["key1":value1,"key2":value2]; (这条语句定义之后swift就推断出当前的testDic是一个字段的变量)
是的,就是这样的简单明了。key和value之间利用“:”分割开来,然后不同的键值对之间通过“,”分割开来,这个时候你可能会问如果我想要某个键里面的value,我应该怎样做呢?也是很简单的:
var keyValue1=testDic["key1"];
只要通过对应的key取出value就可以了,如果我想要在前面定义的testDic字典变量里面在增加一个键值对应该怎么做呢?如下:
testDic["keys"]="value3";
好了,说到这里面你可能已经忍不住想要自己试一试了,别急,让我们再来提出一个问题:如果你想要定义一个空的数组,或者空的字典类型,你会怎么做呢?想想你自己熟悉的语言吧!但是在swift里面却只要:
var testArray=[]; //定义一个空的数组
var testDictionary=[:]; //定义一个空的字典类型
你会疑问这样就可以了吗?是的,这样就足够了,剩下的就留给swift自己去推断吧!
好了,经过这个几个小问题,你可能会觉得swift确实挺强大,但是再强大也是从基础开始的,下面就让我们从头来看一看swift里面的一些基础部分吧!
首先是变量/常量的定义,想想你自己熟悉的语言,你会怎么做呢?在Swift里面,你只需要如下:
var testBL=10; //定义一个变量
let testCL="hello world"; //定义一个常量
var testBL1=10.0,testBL2=10,testBL3="xiaocai"; //同时定义多个变量也是可以的,就像其他语言一样快捷
如果你能够知道所要定义的变量或者常量的初始值的话,那么就尽量给它们初始值吧!这样你就不需要过多的考虑当前变量或者常量的类型,直接赋好初始值让swift自己去推断吧!但是有的时候你暂时还不知道自己所要定义的变量的初始值到底是什么?这个时候你应该怎么去定义呢?如下:
var testWithOutValue:Int;
let testWithOutValue2:String;
这种情况下,你需要在定义的变量名称后面加上“:”,然后是变量类型(Int,String),说到这里让我们顺便提一下swift里面一些常用类型吧!包括如下:
Int,String,Bool,Array,Dictionary,Double,Float,nil(这个在oc里面表示一个空指针,但是swift里面就是空类型,仅此而已)
在swift里面还特地提供了两个属性用来或者每种类型的取值范围呢,分别是:min,max,有的时候我们可能需要进行类型强转,这个时候在swift里面应该怎么处理呢?如下:
var testInt=10;
var testString="xiao";
var testResult=testString+String(testInt);
没有就是在所要转换的类型前面用括号括起来加上强转的目的类型就可以了。这里面提一点有趣的事情:
var testBigNumber=1_000_000_000_000;
这种在中间加上下滑线的大整形,swift能够识别吗?答案是yes,这就方便我们处理一些大数据了。我记得在c#里面有个类型别名的做法,那么在swift里面我们应该怎么做呢?
var myInt=Int; //这样就相当于给Int类型去了一个别名了,后面如果你想要定义自己的整形就可以使用myInt了。
println(myInt.min);
var testMyInt:myInt; //定义一个Int类型
好了,让我们再将一个swift里面一个很牛逼的类型元组(tuples),首次看到的话,你可能会问这是什么东东呢?让我们来假设这样一种场景吧!在你打开浏览器的时候,因为网络原因,你可能在访问网页的时候看到了404。如果我说光是一个404我可能不知道到底是什么意思,我要你在程序里面将不同code利用说明文字一一对应起来,这个时候你会怎么做呢?在c#里面你最可能想到的办法就是定义一个字典对象keyValue的形式。那么在swift里面我们应该怎么做呢?其实跟字典差不多,但是定义,访问的方式就有很大的差别了。
var http404Tip=[404,"Not Found"]; //定义一个说明元组
http404Tip.0; //访问元组里面第一个元素
http404Tip.1; //访问元组里面第二个元素
var (statusCode,statusVlaue)=http404Tip;
println(statusCode+statusValue); //直接利用值绑定的方式访问
如果我只对code感兴趣的话,我可以这样做:
var (statusCode,_)=http404Tip; //下划线就相当于一个占位符的意思
println(statusCode);
在swift里面我看到一些c#的影子,为什么这么说呢?请看下面的例子:
var testOption:Int?=10;
println(testOption!);
这两行代码是在干什么呢?首先第一行代码是在定义一个可选的Int类型,就跟c#里面的可空类型一样。然后第二行代码又是在干什么呢?后面为什么会有个!号呢?这就是在说到底testOption会不会为nil呢?你给我去解析一下,强制swift做解析。但是这样做其实是很危险的,因为当解析为空的时候,会出现异常。那么遇到这种情况的话,我们应该怎样去处理呢?我们可以利用swift里面提供的可选绑定的方式,如下:
if var testOptionResult=testOption{
println("parse success");
}
else{
println("parse failed");
}
如果强制解析成功的花,进入if里面,如果解析的过程发现是nil进入else,这样就可以很好的处理上面的异常问题了。在swift里面还有个隐式解析的过程,如下:
var testYS:String!="xiao cai";
println(testYS);
我们在定义变量的时候,就声明了一个带感叹号的String类型,输出的时候我们就不需要强制解析了。
好了,让我们在来说一下本篇博客的最后一个知识点,那就是断言。在swift里面定义一个断言如下:
var age=-3;
assert(age>0,"Big Zero");
只有当age>0为true的时候,程序才继续执行,否则进入断言里面输出“Big Zero”提示信息。
Swift学习初步(一)的更多相关文章
- swift学习初步(四)-- 函数
好了,让我们开始接着前几天写的系列博客开始今天的这篇博客.在swift里面如果你需要定义一个方法的话,你需要使用关键字:func,请看下面的这段代码: func sayHello(name:Strin ...
- swift学习初步(三)--控制流操作
在上一篇博客里面,我谈到了swift里面的一些基本类型以及相关的操作,相信你看了之后一定会觉得其实swift也不难嘛.好吧,这篇博客里面要谈的一些高级操作,可能会让你有点头疼了. 好了,废话不多说了, ...
- [转]swift 学习资源 大集合
今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 ...
- swift 学习资源 大集合
今天看到一个swift学习网站,其中我们收集了大量的学习资源 Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简单介绍 (@peng_gong) 一篇不错的中文简单介绍 [译] ...
- ios swift学习日记1-Swift 初见
最近ios的swift语言似乎火了,我没有objectc基金会,但在此之前有cjava的基础的.从这几天開始学习ios的swift语言.后期以博客形式公布.这里提供一本翻译的英文版的swif书籍. 还 ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- 今天开始Swift学习
今天开始Swift学习 在此记录笔记 以备之后查阅! allenhuang
- iOS ---Swift学习与复习
swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...
- 12套swift学习资源分享
虽然objective-c编程语言在过去很长一段时间都是iOS应用开发的基础语言,且很多iOS开发者对其也深爱有佳,但是随着swift编程语言的问世,迅速发展为开发者追捧的语言.且今年伴随着swift ...
随机推荐
- CISCO动态VLAN配置
一.基于VMPS的动态VLAN配置实例 网络中VLAN实现分为静态 VLAN和动态VLAN.静态VLAN又被称为是基于端口的VLAN.顾名思义,就是明确指定各端口属于哪个VLAN的设定方法,交换机中某 ...
- imp-00002 无法打开。。
路径错了无疑 文件名少了个字符无疑 文件名错了无疑
- socket学习笔记——获取域名与IP(linux)
gethostbyname.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #includ ...
- AX在query中添加自己的函数
在自己新建的Query中,想添加自己提供的函数,我们可以在系统的标准类SysQueryRangeUtil中添加自己写的函数 然后在Query的Range中按照格式(method())进行调用
- linux下LAMP环境搭建尝试
最近,学习搭建了LAMP服务环境,中间遇到了很多问题,经过不断摸索总算得以解决.为了大家少走弯路,现将相关经验进行总结. linux下软件安装分为自动安装和手动安装两种,自动安装借助工具如yum等,自 ...
- javascript设计模式-适配器模式
适配器模式的主要作用是将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些对象(类)可以一起工作. UML示意图: 例如,鸭子有fly方法和quack(嘎嘎 ...
- 五、用户数据报传输(UDP)
1.UDP常用的发送和接收函数 int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,i ...
- Spring与Quartz的整合实现定时任务调度
摘自: http://kevin19900306.iteye.com/blog/1397744 最近在研究Spring中的定时任务功能,最好的办法当然是使用Quartz来实现.对于一个新手来说,花了我 ...
- js怎样改变div的宽度
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 新手浅谈Task异步编程和Thread多线程编程
初学Task的时候上网搜索,看到很多文章的标题都是task取代thread等等相关,我也一直以为task和thread是一类,其实task是.net4.0提出的异步编程,在之前.net1.0有dele ...