iOS中 Swift初级入门学习(二)
// Copyright (c) 2015年 韩俊强. All rights reserved.
//
import Foundation
/*
// 控制语句
// for - in
// 遍历字符串
for character in "hello,word" {
println(character)
}
// 变量数组
let array = ["小韩哥","小妹妹","二妹子","小美女","二美女","习大大"]
for element in array {
println(element)
}
// 同时取出数组中的下标和元素
for (index,element) in enumerate(array) {
println("index = \(index), element = \(element)")
}
// 遍历字典中的key,value
let dict = ["name":"小韩哥","age":18,"gender":"男"]
for (key,value) in dict {
println((key,value))
}
// 遍历字典中的所有keys
for key in dict.keys {
println(key)
}
// 遍历字典中的所有的values
for value in dict.values {
println(value)
}
// 遍历区间
for number in 1...10 {
println(number)
}
// 计算2的8次幂
// _ 在这里是忽略该值的意思
var result = 1
for _ in 1...8 {
result *= 2
}
println(result)
// for 循环
result = 0
for var i = 0; i <= 100; i++ {
result += i
}
println(result)
// while 循环
result = 0;
var i = 0
while i <= 100 {
result += i
i++
}
println(result)
// do...while 循环
// do...while 和 while 的区别就是 do...while循环不管条件真假, 都会执行一次循环体
while false {
println("hello, word")
}
do {
println("hello,word")
}while false
// if 分支语句
// Swift当中,赋值语句没有返回值, 我们不能把赋值语句作为判断条件
let genderOfSuoNing = "女"
if genderOfSuoNing == "女" {
println("hello, word!!!!")
}else{
println("去泰国吧")
}
// 级联式
let numberOfFriends = 5
if numberOfFriends == 1 {
println("打台球")
}else if numberOfFriends == 2 {
println("斗地主")
}else if numberOfFriends == 3 {
println("打麻将")
}else if numberOfFriends == 4 {
println("旅游")
} else {
println("KTV")
}
// if 语句值绑定
// 我们通过if语句可以给一个常量或者变量赋一个可选类型的值, 不用通过强制解析
var optionalNumber : Int? = 10
if let number = optionalNumber {
println("number = \(number)")
} else {
println("没有赋值成功")
}
// switch 语句
// Swift当中, 两个case语句之间默认是不贯穿的, 我们不用加break关键词
let phoneNumber = 5
switch phoneNumber {
case 1:
println("一楼分级")
case 2:
println("二楼分级")
case 5:
println("三楼分级")
// 如果想执行下面的case语句, 我们可以加一个关键字 fallthrough
fallthrough
default:
println("对不起,您拨打的电话正在通话中")
}
// continue, break 关键字
for var i = 0; i < 5; i++ {
if i == 3{
// 结束本层循环
break
}
println("i = \(i)")
}
for var i = 0; i < 5; i++ {
if i == 3{
// 结束本次循环
continue
}
println("i = \(i)")
}
// 标签语句
小韩哥 : while true {
for var i = 0; i < 10; i++ {
if i == 5 {
break 小韩哥
}
println("i = \(i)")
}
}
// 区间匹配
let moneyOfHjq = 200
switch moneyOfHjq {
case 1..<10:
println("只有几块钱")
case 10..<100:
println("只有几百块钱")
default:
println("有好多钱呢")
}
// 元组匹配
// case 语句中的元组, 只要有一个条件满足, 元组就不会匹配值, 如果执行了一个case语句, 那么除非加上fallthrough 关键字,否则下面的case语句就不会执行
let aTuple = (5,6)
switch aTuple {
case (let x,7):
println("x = \(x)")
case (5,let y):
println("y = \(y)")
default:
println("没有匹配成功")
}
// where 关键字 , 加一个判断条件, 相当于且的意思
switch aTuple {
case (let x, let y) where x > y:
println("x = \(x),y = \(y) x > y")
case (let x,let y) where x < y:
println("x = \(x),y = \(y) x < y")
default:
println("x = y")
}
// _ 任意值. 忽略该值
let somePoint = (0,2)
switch somePoint {
case (0,0):
println("该点在原点")
case (0,_):
println("该点在y轴上")
case (_,0):
println("该点在x轴上")
default:
println("该点在坐标系上")
}
*/
// 函数
// 语法 func 函数名(参数) -> 返回值 { 执行语句 }
// 无参,无返回值
// 无返回值的花, -> Void 可以省略
func printHello() -> Void {
println("Hello, word")
}
func printHi(){
println("Hi,你好啊")
}
// 函数的调用
printHello()
printHi()
// 无参,有返回值
func returnAString() -> NSString {
return "太棒了,下雪了"
}
let aString = returnAString()
println("aString = \(aString)")
// 有参,有返回值
func returnUpprtCaseOfStr(Str: String) -> NSString {
return Str.uppercaseString
}
let result = returnUpprtCaseOfStr("abc")
println("result = \(result)")
// 有参,无返回值
func printStringWithAStr(str : String) {
println("str = \(str)")
}
printStringWithAStr("hello,word")
// 返回一个元组
func returnMangElement(str:String) -> (String,String) {
return (str.uppercaseString,str.lowercaseString)
}
let 元组 = returnMangElement("aBc")
println(元组.0,元组.1)
var array = ["hello","hi"]
array.removeAll(keepCapacity: false)
// personName 是外部参数, 让使用者很方便的知道我们需要传入什么样的参数, 但是这个外部参数对内部参数没有任何影响
func printStr(personName str: String){
println("name = \(str)")
}
printStr(personName: "啦啦啦")
// #号的作用, 让我们这个参数在内部可以使用, 在外部可以让使用者看到
func printAStr(#personName : String){
println("name = \(personName)")
}
printStr(personName: "你好")
// 求两个数的和的函数
// 函数的类型 (Int,Int) ->Int
func addTwoNumber(num1 : Int, num2 : Int) ->Int {
return num1 + num2
}
// 求两个数的积的函数
func mulTwoNumber(num1:Int,num2: Int) ->Int {
return num1 * num2
}
// 根据类型推断, aFunction就是一个函数, 类型为(Int,Int) ->Int
var aFunction : (Int,Int) ->Int = addTwoNumber
let result2 = aFunction(5,6)
println("result = \(result2)")
aFunction = mulTwoNumber
let result3 = aFunction(5,6)
println("result3 = \(result3)")
// 函数作为返回值
func returnAFunction(judge: Bool) ->(Int,Int) ->Int {
return judge ? addTwoNumber : mulTwoNumber
}
var resultFunction = returnAFunction(true)
let result4 = resultFunction(5,6)
println(result4)
// 函数作为参数
func hanshu(funcName : (Int,Int) ->Int,num1:Int,num2:Int){
let result = funcName(num1,num2)
println("result = \(result)")
}
hanshu(addTwoNumber , 9, 8)
// 函数内部函数
func functionEmbedFunction(judge: Bool,number:Int){
// 函数内部的函数只能在该函数内部调用
// 函数的参数默认是不可变的, 如果想要改变函数参数的值, 我们需要把该参数用 var 修饰
func addNumber(var num:Int){
println(++num)
}
func reduceNumber(var num:Int){
println(--num)
}
judge ? addNumber(number) : reduceNumber(number)
}
functionEmbedFunction(true, 19)
functionEmbedFunction(false, 30)
// 闭包
// 闭包含函数代码块
// 语法
/*
{
(参数) ->返回值 in
执行语句
}
*/
let blockValue = {
(str: String) ->String in
return "hello" + str
}
// 闭包的调用
let resultOfBlock = blockValue("word")
println(resultOfBlock)
// 枚举
// 值类型
// 如果枚举是整形值的话, 和我们C语言中枚举的用法基本相同, 如果不给参数赋初始值, 参数默认从0开始,递增
enum Season : Int{
case Spring
case Summer
case Autumn
case Winter
}
var currentSeason = Season.Winter
println(currentSeason)
// 通过 .rawValue可以取出枚举值
println(currentSeason.rawValue)
// 如果枚举类型不是整形, 我们需要给枚举的成员变量赋值
enum FromWhere : String {
case North = "北方"
case South = "南方"
case West = "西方"
case East = "东方"
}
var currentLocation = FromWhere.North
println(currentLocation.rawValue)
// 如果我们已经知道变量是什么枚举类型, 那么我们给他赋值的时候, 就可以省略,枚举名, 通过 .成员变量的方式直接给他赋值
currentLocation = .West
println(currentLocation.rawValue)
// 验证枚举类型是值类型还是引用类型
var anotherLocation = currentLocation
anotherLocation = .East
switch currentLocation {
case .West:
println("以前的值没有发生变化, 枚举是值类型")
default:
println("值发生了变化, 枚举是引用类型")
}
// 类
// 引用类型, 声明一个类我们用关键字 class 来修饰
class Student {
// 属性
var name : String!
var age : Int!
var gender : String!
func printInfoOfStudent(){
println("name = \(name),age = \(age),gender = \(gender)")
}
}
// 通过构造方法创建一个学生实例
// 用let修饰类的实例, 如果属性是可变的, 那么我们就能修改该属性, 如果属性是不可变的, 我们就不能修改该属性
let student = Student()
student.name = "小韩"
student.age = 18
student.gender = "男"
student.printInfoOfStudent()
let student2 = student
student2.name = "小妹"
student2.gender = "女"
student2.age = 20
student2.printInfoOfStudent()
// 因为student是用let修饰的,我们不能改变student
//student = student2
// 结构体
// 值类型, 声明结构体我们用struct关键词
// 和类的区别: 类可以被继承, 结构体不可以
struct People{
// 属性
var name : String
var age : Int
var gender : String
// 方法
func printInfoIfPeople(){
println("name : \(name),age : \(age),gender : \(gender)")
}
}
// 结构体属性不用赋初始值, 因为结构体默认有一个逐一构造器, 通过这个方法, 我们可以给每一个属性
let people = People(name: "小白", age: 21, gender: "男")
people.printInfoIfPeople()
// 结构体实例如果用let修饰, 即使结构体的属性是可变的, 该实例的属性也不能发生改变, 要想修改该实例的属性, 我们需要用var来修饰该实例
//people.name = "小花"
// 验证结构体是引用类型还是值类型_值类型
var people1 = People(name: "静静", age: 18, gender: "男")
var people2 = people1
people2.name = "哈哈"
people1.printInfoIfPeople()
iOS中 Swift初级入门学习(二)的更多相关文章
- iOS中 Swift初级入门学习(三)
// // main.swift // LessonSwift-03 // // Copyright (c) 2015年 韩俊强. All rights reserved. // import Fou ...
- iOS中 Swift初级入门学习(一)
/ // Copyright (c) 2015年 韩俊强. All rights reserved. // import Foundation // Swift当中的输出函数 // println S ...
- 转 iOS Core Animation 动画 入门学习(一)基础
iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- SpringMVC入门学习(二)
SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...
- SpringCloud实战之初级入门(二)— 服务注册与服务调用
目录 1.环境介绍 2.服务提供 2.1 创建工程 2.2 修改配置文件 2.3 修改启动文件 2.5 亲测注意事项 3.服务调用 3.1 创建工程 3.2 修改配置文件 3.3 修改启动文件 3.4 ...
- git入门学习(二):新建分支/上传代码/删除分支
一.git新建分支,上传代码到新的不同分支 我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...
- Egg入门学习(二)---理解service作用
在上一篇文章 Egg入门学习一 中,我们简单的了解了Egg是什么东西,且能做什么,这篇文章我们首先来看看官网对Egg的整个框架的约定如下,及约定对应的目录是做什么的,来有个简单的理解,注意:我也是按照 ...
- iOS Core Animation 动画 入门学习(一)基础
reference:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide ...
随机推荐
- Linux学习之CentOS(十八)-----恢复Ext3下被删除的文件与 使用grep恢复被删文件内容(转)
前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 'test.txt' $ls -il test.txt 15 -rw-rw-r– 2 roo ...
- c# 虚拟路径转化为物理路径
string strPhycicsPath= Server.MapPath(path);
- git修改远程仓库地址
方法有三种: 1.修改命令 git remote set-url origin [url] 例如: git remote set-url origin gitlab@gitlab.chumob.com ...
- git报错:'fatal:remote origin already exists
git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明. git添加远程库的时候有可能出现如下的错误, 怎么解决? 只要两步: 1 ...
- node的异常处理
Node是单线程运行环境,一旦抛出的异常没有被捕获,就会引起整个进程的崩溃.所以,Node的异常处理对于保证系统的稳定运行非常重要. node的处理方法: 1.使用throw语句抛出异常 常用的捕获异 ...
- 数据库4m10d作业
Create table student ( Sno char(15) primary key , Sname varchar(10) not null, Sage tinyint , Special ...
- Struts2 转换器
转换器 从一个 HTML 表单到一个 Action 对象,类型转换是从字符串到非字符串 Http 没有 "类型" 的概念,每一项表单的输入只可能是一个字符串或一个字符串数组,在服务 ...
- ACM Robot Motion
机器人已被编程为按照其指令中的路径进行操作.机器人要移动的下一个方向的指令放在网格中.可能的指令是 N north (up the page) S south (down the page) E ...
- Android自定义View(LineBreakLayout-自动换行的标签容器)
最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...
- Velocity 语法及其在springMVC中的配置
强烈推荐具体的整合博客:http://blog.csdn.net/duqi_2009/article/details/47752169 整合文章中有几处问题: xml中配置的vm视图解析器,应该按照本 ...