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的更多相关文章

  1. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  2. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  3. Swift学习笔记一

    最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...

  4. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  5. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  6. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. swift学习笔记1——基础部分

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  9. Swift学习笔记(14)--方法

    1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...

随机推荐

  1. JSOI2008星球大战——联通块数量

    题目:https://www.luogu.org/problemnew/show/1197 此题不能按时间顺序进行删点.求连通块数量,而应打破时间的思维,先形成一张没有要删去的点的图,再从后往前逐个加 ...

  2. Linq to Object 延迟标准查询操作符

    1.Where 操作符用于限定输入集合中的元素,将符合条件的元素组织声称一个序列结果.2.Select  操作符用于根据输入序列中的元素创建相应的输出序列中的元素,输出序列中的元素类型可以与输入序列中 ...

  3. [poj3417]Network(LCA+树形dp)

    题意:给出一棵无根树,然后下面再给出m条边,把这m条边连上,每次你去两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 解题关键:边权转化为点权,记录每条边被环覆盖的次数,通过val[a] ...

  4. 利用jQuery实现鼠标滑过整行变色

    在很多网站都有这样的效果,那就是当鼠标放在新闻列表一行上的时候,整行就会变色,虽然使用CSS也能够实现此种功能,但是由于众多浏览器版本对于CSS3并没有良好的支持,所以在当前情况下,使用jQuery实 ...

  5. 1.5 webshell文件上传漏洞分析溯源(1~4)

    webshell文件上传漏洞分析溯源(第一题) 我们先来看基础页面: 先上传1.php ---->   ,好吧意料之中 上传1.png  ---->   我们查看页面元素 -----> ...

  6. MS SQL Server的LTRIM,RTRIM和TRIM函数

    在MS SQL Server 2017有了一个新函数TRIM,整合以前版本LTRIM和RTRIM. 这几个函数都是去除字符串头部后尾部的空格. DECLARE @str NVARCHAR(MAX) = ...

  7. Myeclipse如何使用自带git工具向远程仓库提交代码(转)

    Myeclipse如何使用自带git工具向远程仓库提交代码 第一步:将改动的代码标记 项目右键:team->synchronize workspace 点击确定 项目右键>add to g ...

  8. mCustomScrollbar 滚动条的使用

    前两天需要设置滚动条的样式,一开始我以为只是用css设置就可以了,嗯,果然还是想的很简单,虽然可以在css设置滚动条样式,但是只是在火狐,IE浏览器上根本就不能用,所以只能使用js插件来设置滚动条的属 ...

  9. Java 环境问题汇总

    准备java环境时,需要设置JAVA_HOME 和 Path , CLASSPATH 环境变量,它们可以是用户变量,也可以是系统变量. 注意: 系统变量的路径排在用户变量之前. 其中,Windows操 ...

  10. Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!

    有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能.查看最流行的扩展机制,比较性能并分析哪一个是最好的. 这是乐队之战,JMeter风格. Beanshell V. JSR223 V ...