Swift基本语法及与OC比较之二
//MARK:-----------------控制流-----------------
//MARK: 1.for - in 循环 ,不用声明Value类型 //for value in 1...6 {
//print(value)
//
//} //不需要具体的值,只是为了得到循环次数 //for _ in 1...6 {
//print("123")
//} //MARK: 2.for循环,和C一样,只是没有 括号 //for var i = 0 ; i < 26 ; i++ {
//print("i = \(i)")
//} //MARK: 3.while 循环,和C一致 //var whileValue = 0
//while whileValue < 10 {
// whileValue++
//
// print("while ++ -- \(whileValue)")
//} //MARK: 4. do-while 循环 //var number = 0 //repeat {
//print("number -- \(number)")
//number++
//}while false //repeat {
// print("number -- \(number)")
// number++
//}while number < 10 //MARK: 5. if-else 语句,分支语句
//var applePrice = 8.5 // double
//
//if applePrice < 5 {
//
// print("applePrice -- \(applePrice)")
//}else{
// print("applePrice -- \(applePrice)")
//} //MARK: if-else语句 的值绑定 可以保护程序 //var optionValue :Int?
//var optionValue :Int? = 5
//if var tempOptionValue = optionValue {
// //如果可选类型有值,就走条件成立的语句
//print("value = \(tempOptionValue)")
//}else{
// //如果没有值,就走条件不成立的语句
// print("可选类型为nil")
//} //MARK: 6.witch - case
//(1)Swift中没有自动贯穿,即使把break删掉,也不会贯穿达下个case语句
//(2)有需要贯穿需求的时候,需要加贯穿语句 fallthrough
//(3)如果case中,没有任何语句,就必须加break ,没有语句就不必加break
//(4)如果不写default,case语句必须包含所有情况。否则必须写。
//var switchValue = 11
//switch switchValue {
//case 10:
// print("10")
//// break
//case 11:
// print("11")
//// break
//
// fallthrough
//case 12:
// print("12")
//// break
//default:
// print("other")
//
//} //MARK: switch -case 的值绑定
//当case条件满足时,进入case语句,把值赋给我们设的局部变量(常量)
//var (x,y) = (0,10)
//switch (x,y){
//case (let localX,0):
// print("localX = \(localX)")
//case (0,let localY):
// print("localY = \(localY)")
//default:
// print("other")
//} //MARK: switch-case的区间匹配 //var money : Float = 10.5
//switch money {
//case 0...10:
// print("穷屌丝")
//case 10...100 :
// print("普通人")
//default:
// print("高富帅")
//} /* 词语辨析
fallthrough :贯穿
continue :结束本次循环,进入下次循环
break:跳出循环
*/ //MARK: 7.标签语
//sign: 主要用于循环嵌套:可以给循环加标签,这样可以给指定循环做一些操作.作用:更易于操作循环
//sign:while true {
//
// for var i = 0 ; i < 10 ; i++ {
//// 指定break是那个控制流
// if i == 5 {
// break sign
// }
// print("i -- \(i)")
// }
//} //MARK: ----------------函数---------------------
//MARK: ----函数调用 -- /*
func 函数名(参数列表) ->返回值 {
//实现动作部分
} */ //func 函数名()->返回值
//MARK: 1.无参无返回值 , 没有返回值可以不写 ->\ //func printFunc(){
//
//} //func printFunc()->Void {
// print("123")
//} ////diaoyong hanshu
//printFunc() //MARK: 2.有参无返回值
//func printCity(cityName:String){
//print("城市--\(cityName)")
//}
//
////调用函数
//printCity("郑州") //MARK: 3.无参有返回值
//func returnString()->String{
//return "北京"
//}
//
//let string = returnString()
//
//print(string)
//
//print(returnString()) //MARK: 4.有参有返回值 :可以支持多个返回值 func matchFun(number1:Int,number2:Int)->(Int,Int){ // number1++
return (number1 + number2,number2 * number1)
} //print(matchFun(2, number2: 3)) /*注意事项:
1.函数的形参是let类型(常量),而不是变量(变量);用var修饰形参可改变
2.交换两个数 */ //1.
func changeCity(var loveCityName:String){ loveCityName = "北京"
// print(loveCityName)
} changeCity("上海") //2.交换两个数
//函数中任意改变形参,实参不会变
//MARK: 注意:要改变实参,需要传进入地址(&),需要inout关键字---
func changeTwoNumber(inout number1 :Int,inout number2 :Int)->(Int,Int){//(1) //func changeTwoNumber(var number1 :Int,var number2 :Int)->(Int,Int){//(2) let tempNumber = number1;
number1 = number2; number2 = tempNumber; return (number1,number2)
} var a = ,b = let (x,y) = changeTwoNumber(&a, number2: &b)//(1)
//let (x,y) = changeTwoNumber(a, number2: b)//(2) //print((x,y))
//print("a- \(a),b - \(b)") //MARK: 给函数添加一个外部形参名,作用:在函数调用时,可以看到 //func travelCity( cityName1:String,CityName:String, cityName3:String){//(1) func travelCity(firstCity cityName1:String,sencondCity CityName:String,thirdCity cityName3:String){//(2) //print("我的旅行路线\(cityName1)-->\(CityName)-->\(cityName3)")
} //调用 //travelCity("北京", CityName:"马尔代夫", cityName3: "巴黎")//(1)
travelCity(firstCity: "北京", sencondCity: "马尔代夫", thirdCity: "巴黎")//(2) // 简化的外部参数名:( 只需要在第一个参数名前加外部参数)
func travelCity1(cityName1 cityName1:String, CityName:String, cityName3:String){//(2) // print("我的旅行路线\(cityName1)-->\(CityName)-->\(cityName3)")
} //调用
//travelCity1(cityName1: <#T##String#>, CityName: <#T##String#>, cityName3: <#T##String#>) //MARK:-----------------函数类型-----------------
//MARK:1.函数类型是由,函数的参数和返回值组成 func addFunc(number1 number1:Int,number2:Int) -> Int{
return number1 + number2
}//这个函数的类型就是 (Int,Int) ->Int //MARK:2.定义函数类型的变量:类似typeDef
//var tongVar :String = "string" var tongVar :(Int,Int)->Int = addFunc //print(tongVar(3,4)) //MARK:3.将函数作为参数
//把addFunc2作为另一个函数的参数
func addFunc2(number1 number1:Int,number2:Int) -> Int{
return number1 + number2
} //参数1- 参数名:match 参数类型:(Int,Int)->Int
//参数2- 参数名:number1 参数类型:Int
//参数3- 参数名:number2 参数类型:Int //func ParaFunc(match match:(Int,Int)->Int,number1:Int,number2:Int){
// let resultNumber1 = match(number1,number2);
// print(resultNumber1)
//}//(1) func ParaFunc(addFunc2 addFunc2:(Int,Int)->Int,number1:Int,number2:Int){ // print(addFunc2(number1,number2))
}//(2) //调用 //ParaFunc(match: addFunc2, number1: 2, number2: 4)//(1) ParaFunc(addFunc2: addFunc2, number1: , number2: )//(2) //MARK:4函数作为返回值,返回值是一个函数类型 func mutiFun2(number1 number1:Int,number2:Int)->Int{
return number1 * number2
} //定义一个函数,返回值类型是(Int,Int)->Int
//参数名:add 类型:Bool 返回值类型:(Int,Int)->Int
func selectFunc(isSelectAddFun add:Bool)-> ((Int,Int)->Int){ return add ? addFunc2 :mutiFun2;
} let result = selectFunc(isSelectAddFun: false)//result 就是函数类型,即(Int,Int)->Int //print(result(1,2))
//
//print(selectFunc(isSelectAddFun: true)(1,2)) //MARK:函数的嵌套
//func emedFun(judge judge:Bool,number:Int){
// //自增函数
// func addNumber(var number1:Int){
// print(++number1)
// }
// //自减函数
// func jianNumber(var number2:Int){
// print(--number2)
// }
// // 利用bool值去判断,调用自增还是自减
// let funcName = judge ? addNumber :jianNumber
// // 利用参数number去调用自增或者自减
// funcName(number)
//} //调用 //emedFun(judge: false, number: 1)//在函数外层调用,对应只能调用函数外层 //MARK: 重点------闭包------
//类似OC中的block
//定义一个闭包
var block = { (str:String)-> Void in
// block块
// print(str) } //调用闭包
block("我爱北京天安门") //MARK:-----------------枚举-----------------
/*
//1.枚举名首字母大写,枚举值首字母也大写
//2.swift的枚举和C的区别
2.1有case关键字
2.2枚举值有哈希值
*/ /*
enum City{
case beijing
case Paris
case NewYork
}
print(City.NewYork.hashValue) //3.原始值和rawValue enum PoneType :String{
case Apple = "IPhone"
case MI = "Mi4"
// case HUAWEI = "荣耀"
case HUAWEI
} print(PoneType.HUAWEI.rawValue)//如果有rawValue就会打印,否则打印case后枚举值 //通过rawValue找到对应的枚举值
var ii = PoneType(rawValue: "荣耀") /*
//print(ii!.rawValue)//强制解析
print(ii?.rawValue)//可选解析
print(ii)//默认为可选解析
*/ */ //MARK:相关值
//利用枚举的相关值结合switch-case进行值的绑定 enum Girl{
case Id(Int)
case Info(String,Int,Double)//姓名,年龄,身高
} //进行值的绑定
/*
var girl = Girl.Info("貂蝉", 21, 165) switch girl {
case Girl.Info(var girlName,var age,var height) :
print("name --\(girlName)")
case Girl.Id(var girlID):
print("ID -- \(girlID)")
}
*/
//MARK:-----------------类----------------- /*和OC区别: 1.运用class关键字
2.没有.h .m
3.在同一个括号内声明属性,书写方法 */ //定义一个类,关键字是Class,类名首字母大写
class Student {
//类的属性(实例变量),属性名studentAge,类型Int
var studentAge :Int
var studentName:String
// 给属性添加init方法,目的为给属性一个默认值
init(studentAge:Int,studentName:String){//一个类只能有一个init方法
// 给属性赋默认值
self.studentAge = studentAge
self.studentName = studentName
} //MARK:注意--类方法 (函数)
func printStu(){
print(self.studentAge,self.studentName)
} // 有参数有返回值
func change(stuName:String)->String{
self.studentName = stuName
return self.studentName
}
} //调用该类
//实例化一个类对象
let studentItem = Student(studentAge: , studentName:"我饿了")
//属性的设置和访问 studentItem.studentAge = ; //print(studentItem.studentAge) //studentItem.printStu() //print(studentItem.change("嗯哼")) //MARK: ---结构体---
//定义一个结构体,关键字struct
//结构体不需要写init方法,因为它已经为我们写好了
struct GirlSTR {
//属性
var girlName:String
var girlHeight:Double // 方法
func printFourBeautifulGirls(girlName1:String ,girlName2:String, girlNmae3:String){//注意‘,’不可少
print("四大美女---\(self.girlName) \(girlName1) \(girlName2) \(girlNmae3)") } func printHeith(){ print(self.girlHeight)
}
} //实例化一个结构体 var girl = GirlSTR(girlName: "小笼包", girlHeight: ) //访问结构体的属性,设置结构体属性
//print(girl.girlName)
girl.girlHeight = 1.60
//girl.printHeith()
//girl.printFourBeautifulGirls("1", girlName2: "2", girlNmae3: "3") //MARK:类和结构体的区别 //1.类是引用类型,结构体是值类型
var studentItem2 = studentItem;
studentItem.studentAge = print(studentItem.studentAge,studentItem2.studentAge) var girl2 = girl
girl.girlHeight = 1.20
print(girl.girlHeight,girl2.girlHeight) //2.类可以继承,结构体不能继承(最本质) //3.结构体对象如果是let类型即使属性是var类型也是不可修改的。类对象即使是let类型,属性如果是var类型也是可以修改的 //MARK:恒等运算 ===
//用来对两个类实例(对象)进行判断,到底是否完全一致 if studentItem2 === studentItem {
print("两个实例相等") }else{
print("两个实例不相等")
}
Swift基本语法及与OC比较之二的更多相关文章
- Swift基本语法以及与OC的比较
一.注释: 1.单行注释和OC一致. 2.块注释中有与OC不同点:可以嵌套注释 二.常量和变量: 1.常量:初始化后可读不可写 let 2.变量:初始化后可读可写 var //不需要指定类型,系统会自 ...
- Swift基础语法(三)
Array数组在swift中Array相当于oc中的NSMutableArray(变长数组) //1.定义数组 var numarr:Int[] = [,,,,]; var strarr:String ...
- 【原】iOS学习之Swift之语法2(精简版)
1.可选类型和强制解包(?和!) 1> 可选类型(?)和强制解包(!) 在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型.其实所谓的 nil 就是 ...
- iOS - Swift 基本语法
前言 Swift 全面支持 Unicode 符号. Swift 中的定义和实现是在同一个单元中的,通常一个 Swift 源代码单文件是以 ".Swift" 结尾的. Swift 不 ...
- Swift 基本语法2
一.?和! 1.可选类型: ? 在swift中,可选类型(?)其根源是一个枚举型,里面有None和Some两种类型.其实所谓的nil就是Optional.None, 非nil就是Optional.So ...
- Swift基本语法学习笔记
Swift与OC的不同点 导入框架的方式 OC使用#import \<UIKit/UIKit.h> Swift使用import UIKit 定义标识符的方式 Swift中定义标识符,必须指 ...
- Swift开发语法
Swift开发入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者 ...
- Swift基础语法
简介 特点 (1)优于OC,快速,安全 (2)取消了预编译指令包括宏定义(OC用的太多了) (3)取消了OC指针和不安全访问的使用(看不到星星了) (4)舍弃 Objective-C 早期应用 Sma ...
- Swift 开发语法
文/Tuberose(简书作者)原文链接:http://www.jianshu.com/p/5e2d4c34f18e著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 简介 Swift 语 ...
随机推荐
- 发现可高速缓存的 SSL 页面
发现可高速缓存的 SSL 页面 技术描述: 缺省情况下,大部分 Web 浏览器都配置成会在使用期间高速缓存用户的页面. 这表示也会高速缓存 SSL 页面.不建议让 Web 浏览器保存任何 SSL 信息 ...
- knowledge about apache
http://wenku.baidu.com/link?url=6O51BQJdtFRFWDGszKfN3aK7IY92QTCpuc7miBhRLazXvxL5gXb18B_TqIdi3EruX1o_ ...
- Linux下的动态连接库及其实现机制
Linux与Windows的动态连接库概念相似,但是实现机制不同.它引入了GOT表和PLT表的概念,综合使用了多种重定位项,实现了"浮动代码",达到了更好的共享性能.本文对这些技术 ...
- 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建
使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 目录 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 使用jenkins自动 ...
- jekyll themes
jekyll主题下载: https://mademistakes.com/work/jekyll-themes/ https://github.com/jekyll/jekyll/wiki/Theme ...
- bzoj2595
一开始看是插头dp,后来发现还有一个叫斯坦纳树的东西 什么叫斯坦纳树,就是使给定点连通开销和最小的树(可以包含多余的点) 到这张平面图上,我们不难想到用dp来解决,设f[x,y,S]表示连通集合为S, ...
- Compass 编译.scss文件的问题
compass 命令编译scss文件存在一个问题: 不能对"_"下划线开头的scss文件名称的文件进行编译.将"_"去掉就可以啦
- UVa 1572 (拓扑排序) Self-Assembly
题意: 有n种正放形,每种正方形的数量可视为无限多.已知边与边之间的结合规则,而且正方形可以任意旋转和反转,问这n中正方形是否可以拼成无限大的图案. 分析: 首先因为可以旋转和反转,所以可以保证在拼接 ...
- auto make System.map to C header file
#!/bin/bash # auto make System.map to C header file # 说明: # 该脚本主要是将Linux内核生成的System.map文件中的符号.地址存入结构 ...
- Spring中使用quartz插件实现定时任务
第一步:导入架包 *spring3.2.3版本的架包将spring的各个功能模块给分开了,我们必须将Spring必须依赖的包导入上去 第二步:编写配置文件 <?xml version=" ...