Swift语法初见
Swift语法初见
http://c.biancheng.net/cpp/html/2424.html
类型的声明:
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
注:如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。
数值转换:
let label = "The width is"
let width = 94
let widthLabel = label + String(width)
注:值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
注:有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。
数组、字典的初始化和赋值
var emptyArray = NSMutableArray.init()
var emptyArray1 = NSMutableArray()
emptyArray[0] = "00000";
emptyArray[1] = "11111";
emptyArray.add("22222")
var emptyDictionary = NSMutableDictionary()
emptyDictionary["1"] = 67788
emptyDictionary["2"] = "67788"
emptyDictionary.setValue("sss", forKeyPath: "key")
控制流
let vegetable = "cucumber"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}
注:支持任意类型比较;支持多个条件匹配;不需要break,因为只运行一个case; 除非case覆盖所有可能,否则default不可缺失
let interestingNumbers:NSDictionary = ["Prime": [2, 3, 5],"Fibonacci": [1, 1, 8],"Fibonacc": [1, 1, 8]]
for (a,b) in interestingNumbers{
print(a)
print(b)
}
输出:Fibonacci [1, 1, 8] Prime [2, 3, 5]
for c in interestingNumbers{
print(c)
}
输出:(key: "Fibonacci", value: [1, 1, 8]) (key: "Prime", value: [2, 3, 5])
注:for in 遍历字典时,两个变量表示 key,value,一个变量表示 key-value键值对
for i in 0...1 {
interestingNumbers.object(forKey: interestingNumbers.allKeys[i])
}
for i in 0..<2 {
interestingNumbers.object(forKey: interestingNumbers.allKeys[i])
}
函数和闭包
func greet(nameOut name:String,_ day:String) -> String{
return "Hello \(name), today is \(day)."
}
greet(nameOut:"sss","sss")
注:1,区分内部和外部参数名 2,返回值的方式
func greet1(names:Int...) -> (a:Int,b:String,c:String){
let a = names[0]
let b = "ss"
let c = "aaa"
return (a,b,c)
}
greet1(names: 1,2,3)
func makeIncrementer() -> ( (Int) -> Int ) {
func addOne(number:Int) ->Int {
return 1+number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
注:1,函数可作为返回值
func hasAnyMatches(list: [Int],condition:(Int)->Bool) -> Bool{
for item in list{
if condition(item){
return true
}
}
return false
}
func lessThanTen(number:Int) -> Bool {
return number < 10
}
var number = [20, 19, 7, 12]
hasAnyMatches(list:number,condition:lessThanTen)
注:1,函数可作为参数
let numbers = [10,20,30]
numbers.map({
(number: Int) -> Int in
let result = 3 * number
let aiia = "ssss"
return result
})
let mappedNumbers = numbers.map { number in number/2
}
print (mappedNumbers)
class Shape {
var name = "aa"
let numberOfSides = 0
init(name:String) {
self.name = name
}
func simpleDescription(name:String) -> String {
return "A shape with \(numberOfSides) sides."
}
func funcInFunc(name:String)->((Int) -> (Int)){
func addSelf(number:Int)->Int{
return 1+number
}
return addSelf;
}
}
Shape(name:"bb")
let p = Shape(name:"aa").funcInFunc(name:"sss")
p(20)
注:1,函数可作为返回值
numbers.map({
(number:Int)->Int in
var aa = number
let num = number % 2
if(num == 1){
aa = 0
}
print(aa)
return aa;
})
class ShapeChild: Shape
{
override func simpleDescription(name: String) -> String{
return "A shape with \(numberOfSides) sides."
}
var sideLength: Double = 0.0
var perimeter:Double{
get{
return 3.0 * sideLength
}
set{
sideLength = newValue/3.0
}
}
var per:Int = 0{
willSet{
print("newValue : \(newValue)")
}
didSet{
print("oldValue : \(oldValue)")
}
}
}
var triangle = ShapeChild(name:"bb")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength = 4.0
triangle.perimeter
triangle.per = 1
triangle.per = 2
注:1,重写父类方法 用 override关键字 2,属性可以有get set方法,oldValue、newValue是默认参数
枚举与结构体
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.rawValue)
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.rawValue
注:使用enum来创建一个枚举 rawValue为自动去取方法
var optionalSquare: Rank? = Rank.Ace
optionalSquare = nil
optionalSquare = Rank.Five
注:如果?之前的值是nil,?后面的东西都会被忽略,并且整个表达式返回nil
enum ServerResponse {
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
case let .Result(sunrise, sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
let serverResponse = "Failure... \(error)"
}
注:一个枚举成员的实例可以有实例值。相同枚举成员的实例可以有不同的值。创建实例的时候传入值即可。
实例值和原始值是不同的:枚举成员的原始值对于所有实例都是相同的,而且你是在定义枚举的时候设置原始值。
protocol printSelf{
var selfStr:String{get}
mutating func printSelf()
}
class desk:printSelf{
var selfStr: String = "a desk"
func printSelf() {
print(selfStr)
}
}
struct phone:printSelf{
var selfStr: String = "a phone"
func printSelf() {
print(selfStr)
}
}
desk()
phone()
注:类、枚举和结构体都可以实现接口。其中类是引用类型,枚举和结构体是值类型
在值类型的实例方法中,也可以直接修改self属性值。 mutating关键字用来标记一个会修改结构体或枚举属性值的方法
泛型
func repeatFunc<T>(item: T, times: Int) -> [T] {
var result = [T]()
for _ in 0...times {
result.append(item)
}
return result
}
repeatFunc(item:"knock",times:4)
Swift语法初见的更多相关文章
- Swift语法入门
正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...
- ios -- 教你如何轻松学习Swift语法(三) 完结篇
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.自动引用计数 1.自动引用计数工作机制 1.1 swift和o ...
- ios -- 教你如何轻松学习Swift语法(二)
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.可选类型(重点内容) 1.什么是可选类型? 1.1在OC开 ...
- ios -- 教你如何轻松学习Swift语法(一)
目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...
- Swift翻译之-Swift语法入门 Swift语法介绍
目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...
- Swift语法总结补充(一)
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...
- Swift语法
Swift语法 标签(空格分隔): Swift 1.打印输出语句 println("Hello, Swift!") 注意每行代码后面无需添加分号作为结束 2.简单值 let---常 ...
- swift 语法 - 以及学习资料
附上一些swift的一下学习资料: 1.Swift语法介绍官方英文版:The Swift Programming Language 2.Swift与Objective-C相互调用Using Swift ...
- Swift语法之 ---- ?和!区别
1.常量和变量 Swift语言中是用let来定义常量,并且要初始化.var来定义变量,在let或者var后面申明类型,冒号+空格,然后再加上类型名称. 2.optional(可选)变量 可选变量用于处 ...
随机推荐
- JVM类加载以及执行的实战
前几篇文章主要是去理解JVM类加载的原理和应用,这一回讲一个可以自己动手的例子,希望能从头到尾的理解类加载以及执行的整个过程. 这个例子是从周志明的著作<深入理解Java虚拟机>第9章里抄 ...
- java将类和函数封装成jar,然后在别的项目中使用这个jar包
本来想用idea安装的,不过用maven生成后发现jar有20,30M肯定不对,后来还是用eclipse生成了,方便很多 环境: eclipse luna,jdk1.8_112 1.生成jar包,首先 ...
- FFmpeg安装(windows环境)
♣FFmpeg是什么? ♣FFmpeg组成 ♣下载工具 ♣安装FFmpeg ♣应用到j2ee项目 前言:学习视频编码,一定要知道雷霄骅(leixiaohua1020)的专栏 ,伟大的程序员,26岁去世 ...
- Java阶段性测试--第四五六大题参考代码
第四题:.此题要求用IO流完成 使用File类在D盘下创建目录myFiles, 并在myFiles目录下创建三个文件分别为:info1.txt, info2.txt, info3.txt . 代码: ...
- 【MyBatis源码分析】insert方法、update方法、delete方法处理流程(下篇)
Configuration的newStatementHandler分析 SimpleExecutor的doUpdate方法上文有分析过: public int doUpdate(MappedState ...
- 安装JDK,配置环境变量有感
前天无事,心血来潮给公司新配的笔记本(win10系统64位)装开发工具,然后不可避免的就装了JDK,顺理成章的需要配置环境变量,结果就出问题了. 配置完成,测试时,在dos命令窗口输入java命令执行 ...
- Deep Q-Network 学习笔记(一)—— Q-Learning 学习与实现过程中碰到的一些坑
这方面的资料比较零散,学起来各种碰壁,碰到各种问题,这里就做下学习记录. 参考资料: https://morvanzhou.github.io/ 非常感谢莫烦老师的教程 http://mnemstud ...
- C++之const限定符
作者:tongqingliu 转载请注明出处: C++之const限定符 const初始化 const的特点: 用const加以限定的变量,无法改变. 由于const对象定义之后就无法改变,所以必须对 ...
- Discuz搜索改为指向帖子
安装的版本是DiscuzX2.5,搜索的时候发现默认指向的是门户里的文章搜索,但程序都没有安装门户,只有论坛,所以不能搜索文章. 在网上找了半天终于找到修改的办法了. <input name=& ...
- 【踩坑记录】记一次MySQL主从复制延迟的坑
最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...