记录:swift学习笔记1-2
swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用。
网上有些大神说:swift很简单!我不同意这个观点,假如你用helloword来说它语法精简没错,但是这个简单的例子不能证明它功能简单!
我相信swift语言非常强大,拥有很多OC以前没有的超强大面向对象特性!想用好并不容易!
下面是:比较系统的整理了自己学习swift 的笔记,一方面用作记录,便于以后查阅,也分享给需要的朋友!
我是任海瑞,共勉!我与你还有很多有梦想的盟友们一起向着swift挑战!
一、简介
objective-c 30多年的语言,方括号语法,吓退不少人员。
swift是一门语法简洁,功能强大的语言,借鉴JaveScript、Go 语言,强大语言,既支持函数式编程,也支持面向对象编程,支持函数和闭包,值传递,引用传递。
支持面向对象的封装、继承、多态基本功能,也支持枚举,结构体,类三种面向对象类型,创建实例,调用方法,允许定义属性,方法,构造器,下标,嵌套类型。
想真正全面掌握swift的所有功能,并不简单。
参考:The Swift Programming Language 编程指南
四部分:
1、开发环境,Playground功能和用法,终端编译,运行程序;
2、基础语法+函数式编程+String\Array/Dictionary等内置类型
3、面向对象编程+Foundation框架
4、MVC设计+UI控件
Just Do It
swift语言是强类型语言,有非常严格的类型检查,是编译型语言,编译后会得到可执行的目标文件。
不允许将可执行代码放在类定义中
例如:
class Test{
println("hello")
}
框架:一系列函数、类等程序单元的集合,系统地提供某一方面的功能。
Terminal :swiftc命令编译程序 swiftc -o hello.out HelloWorld.swift
生成hello.out文件
./hello.out 执行
func test(){
println("test function")
}
swiftc -o test.out Test.swift main.swift
为了能让系统找到swift编译命令,需要配置路径添加到系统的PATH
修改Home 目录下的.bash_profile文件实现(隐藏文件,进入Home,然后ls -a即可)
PATH = /Applications/Xcode-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH
:是两个路径之间的分隔符
重启系统即可
use core date复选框 是表示项目打算使用core Date 来访问SQLite数据库
测试用例:
setUp() 初始化基础的测试资源
tearDown() 销毁setUp()初始化的测试资源
wrap lines 自动换行
帮助文档中:C是类,M是方法,Pr是协议,f是函数
二、基本数据类型
注释:代码即是文档。
var 变量:装数据的小容器,
var name = "任海瑞"
printlin(name)
let 常量:一旦创建不能更改
var lastName= "ren"
allName = lastName + "hairui"
var str = "heri" 判断Sting是否为空 str.isEmpty
花括号:{代码块} 包括:类,结构体,枚举,函数体,方法体
方括号:[数组元素或字典元素] a[] = 3 ; cross["swift"] = 80 //对cross字典中key为swift的元素赋值
圆括号(定义元组或定义函数)
圆点. 类,结构体,枚举,实例和它的成员(属性和方法)调用
关键字:keyword 具有特殊用途的单词
声明:class,deinit,enum,extension,func,import,init,internal,let,operator,private,protocol,public,static,struct,subscript,typealias,var
语句:break,case,continue,default,do,else,fallthrough,for,if,in,return,switch,where,while
类型,表达式:as,dynamicType,false,is,nil,self,Self,super,true,_COLUMN_,_FILE_,_FUNCTION_,_LINE_
可同时声明多个变量,不同类型
var a = 10,b:String,c = "renhairui"
let myName = "renhairui",myAge = "26"
println() 比print()输出内容后会换行
字符串插值string interpolation : 变量名/常量名 放在圆括号内,前面使用反斜杠进行转义。例如:println("我的名字是:\(myName),我的年龄是:\(myAge)")
一般尽量使用Int型,会提高通用性,可以访问不同整型的min, max属性来获取最小最大值,例如:println(Int32.min)
避免使用无符号整数,提高代码复用性,避免不同数值类型之间转换改变值。
并且建议从小向大变 Int8->Int16->Int32->Int64->Float->Double
Bool 只能是true,false 和oc中完全不同
元组 tuple :用圆括号把多个值组合成一个复合值,可以是任意类型。
var health = (180,70,"良好") //自动推断类型 (Int,Int,String)
可以嵌套 var test (20,(15,"swift")) 通过下标访问,\(health.0) \(test.1.0)
也可以拆分成单个的 var (height,weight,status) = health; println("身高是:\(height) ,体重:\(weight),状态:\(status)")
不需要某个的时候,可以用_下划线 ,忽略 let(a,b,_) = health
可以使用key value 命名, var health = (height:180,体重:70,status'良好")
key 赋值时,顺序可以调换。 通过名字访问: \(health.height)
可选类型 处理值缺失的情况 类型? Sting?
var str = "renhairui"
var num :Int? = str.toInt() //转换失败,是nil,值缺失
区别:OC中nil代表 不存在的对象指针 ,swift中完全不同!
只有可选类型的变量常量才能接受nil
var age:Int = nil //错误的!
强制解析 forced unwrapping 为了获取可选类型的值,名后加!,进行解析,表示:已知已有值,提取值
var str:String? = "renhairui"
var s:String = st!
var n1:Int? = 10
var n2:Int? = 5
let sum = n1!+n2! // 必须使用强制解析,否则编译无法通过
为了确保强制解析不会导致运行崩溃,提供if判断
if str != nil
{
var s = str!
}else{
println("不能强制解析")
}
if n1 !=nil && n2 !=nil{
let sum = n1! +n2!
}
可选绑定 optional binding 用于判断可选类型是否有值,用在If while中判断
var str : String? = "renhairui"
if var tmp = str{
println(tmp)
}
隐式可选类型 任意已有类型后边加!表示可选类型
区别:
Int! 接受 Int值和nil
Int 只能接受Int值
Int?接受Int和nil 但是要强制解析
作用:用于定义那些被赋值之后 不会重新变为nil的变量
用的时候也需要判断 if let temp = name {}
类型别名 typealias typealias Counter = Int //以后使用Counter完全代表Int \(Counter.max)
Unicode形式 \u{2666} 表示 ♦️
var str = String() //创建空字符串
var strCopy = String(count:5,repeatedValue:Character("f")) //创建5个重复f
let name = "renhairui"
var info = name + "is a good man!"
println(info)
var subStr = name.substringWithRange(NsMakeRange(3,6)) // 从3开始,连续6个,输出hairui
swift的Sting 是值类型,复制实例的副本传递,不是OC的 *
info.removeAll //清空
countElements(info) //计算字符数量,unicode也可以
遍历
for a in info
{
println(a)
}
比较字符串: 相等: ==,前缀相等:hasPrefix(),后缀相等:hasSuffix()
var hasOrNo:Bool = name.hasPrefix("ren") //name = "renhairui"
记录:swift学习笔记1-2的更多相关文章
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- Swift学习笔记一
最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记4——扩展、协议
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记1——基础部分
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift学习笔记(14)--方法
1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...
随机推荐
- python使用uuid生成唯一id或str
介绍: UUID是128位的全局唯一标识符,通常由32字节的字符串表示. 使用: import uuid print uuid.uuid1() 14bfe806-f1c7-11e6-83b5-0680 ...
- SIP业务基本知识
1.SIP业务基本知识 1.1 业务介绍会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终 ...
- Python之模块介绍
模块介绍 模块,是用一些代码实现的某个功能的代码集合. 类似与函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用,提供了代码的重用性和代码间的耦合.对于一个复杂的功能,可能需要多个函 ...
- DTP模型之一:(XA协议之三)MySQL数据库分布式事务XA优缺点与改进方案
1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...
- css 中visibility:hidden和display:none有什么区别呢
<div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- 塞尔达:旷野之息个人对比上古卷轴V:天际
上古卷轴5是我之前玩过最优秀的作品.玩塞尔达的时候就有跟上古卷轴5比对,真的都是神作.两个游戏的自由度都是真的高. 主线剧情上,老滚5印象不深了,当时就知道战斗,只记住了开头砍头现场,还有奥杜因这个龙 ...
- Ajax的属性
1.属性列表 url: (默认: 当前页地址) 发送请求的地址. type: (默认: "GET") 请求方式 ("POST" 或 "GET ...
- CF-822B
B. Crossword solving time limit per test 1 second memory limit per test 256 megabytes input standard ...
- JAVA之BigInteger(转)【转】【很好用啊】
用Java来处理高精度问题,相信对很多ACMer来说都是一件很happy的事,简单易懂.用Java刷了一些题,感觉Java还不错,在处理高精度和进制转换中,调用库函数的来处理.下面是写的一些Java中 ...