文档章节

swift初学总结

代码诱惑
 代码诱惑
发布于 2014/08/17 00:10
字数 1162
阅读 15
收藏 0

自从苹果公司发布了新的编程语言swift,让我提起了更大的兴趣,初看swift的文档,发现swift与JavaScript语言的有点相似,有点类似脚本语言了。

支持swift开发的ide为xcode 6 beta 

刚开始学,随便写写吧

swift函数:swift函数可以存在在struct结构体里,也可以存在在calss里,还可以独立的写,不依附与具体的结构体和类

(这一点有点像oracle中定义函数的意思,可以依附于type,也可以独立的function)

声明一个函数:

func someFunction(args: Int,outArgs b:Double,#inout:String,ifchonse a: String = "你好") 
   -> Int{
    //此处定义了有四个参数的一个函数,返回值是一个Int类型,四种不同的参数写法,
    //args参数,类型为Int类型,这个参数的名是内部参数明,当然也可以用作外部参数名,如果只含有一个参数名的
    println(args)
    //outArgs b 参数,类型为Double类型,outArgs为外部参数名,b为内部参数名,调用这个函数时可以这样调用
    //someFunction(3,outArgs : 2.5,inout: "你是谁"),在内部使用第二个参数时,参数名为b
    println(b)
    //参数名前加#号,可以当作内部外部参数,最后一个参数是可有可无的,没有传递最后一个参数时,最后一个参数默认为 “你好”
    
    
    return 33
}

函数类型:一个函数可以看作一个类型,for example

func add(a: Int, b: Int) -> Int{
    return a+b
}
func reduce(a:Int, b: Int) -> Int{
    return a-b
}
//以上这两个函数的格式都是(Int,Int) -> Int ,所以这两个函数都有一个相同的类型,函数类型也是一种类型,所以可以有更多地灵活用法

var ownFunction:(Int, Int) -> Int //声明一个函数类型的变量
if condition {
    ownFunction = add         //给函数类型的变量赋值
}else{
    ownFunction = sub
}
let result = ownFunction(3,5) //执行函数的

函数还可以当作参数,也可以当作返回值
func addAge(age: Int, age2: Int) -> Int{
    return age+Int(age2)
}

func hasFuncArgsFunction(a:Bool, #callback:(Int,Double) -> Int) -> (Int,String) ->Int{
    if a {
        let result = callback(3,3.5)
        return func reFunc(age:Int, name:String) -> Int{
            return age+result
        }
    }else{
        return func reFunc(age: Int, name:String) -> Int{
            return age
        }
    }
}
//调用上面的函数
var resultFunction  = hasFuncArgsFunction(a:true,callback:addAge)
//这里会得到一个函数,函数最后返回的是一个Int值
var overResult = resultFunction(age: 55,name: "小飞")
//这里貌似还有一个闭包,内部返回函数,引用到了hasFuncArgsFunction函数里面的一个常量,swfit这么灵活的的函数//方式,估计以后会有很多复杂的函数问题,函数中可以返回函数,返回的函数还可以返回函数,还好返回类型确定了,要是//跟js一样返回值不确定会是什么,那样很可能造成运行。看了几天,swift并不是若类型语言,而是很强的强类型语言,起//码比java类型约束强

swift内存管理机制方式,也许是借鉴的javaScript引用计数,但回收机制却不一样,js回收是利用gc来在不定期间回收内存中引用数为0的内存对象,swift在引用计数为0时,会立刻把该对象在内存内移除,而曾经在js中引起内存泄露的循环引用问题,在swift语言中采用弱引用也很好的得到了解决,写个例子

class Dog{
    var host: Person?
}

class Person{

    var hony: Dog?
    
    func getDog(dog:Dog){
        hony = dog
        dog.host = self
    }
}
//可选属性,可以不初始化属性
var person = Person() //Person被 person引用,计数++
var dog = Dog()       //Dog被 dog引用,计数++
//由于对象类型是按引用传递的,这里host会引用到Person,hony会引用到Dog,这种引用是一种强引用,会造成这两个对象的引用计数+1
person.getDog(dog:dog)

//当运行完该程序,person,dog不再指向内存中的Person对象和Dog对象,然而两个内存中的对象的引用计数不是0
//这样这两个对象会一直会存在在内存中,直到整个程序退出,这样会造成内存泄露

弱引用:一种可以不用增加对象的引用计数的方式
cLass Dog{
    weak var host: Person?
}
class Person{
    weak var dog: Dog?
    
    func getDog(dog: Dog){
        dog = dog
        dog.host = self
    }
}
//采用关键字weak,可以让引用变成弱引用,引用计数不会+1,当Person的引用计数变为0时,Dog的host会被赋值为nil
//,因此弱引用必须为可选值,
误导了请谅解,swift菜鸟中。。。。

待续。。。






















© 著作权归作者所有

下一篇: js自定义事件
代码诱惑
粉丝 1
博文 5
码字总数 3223
作品 0
济南
程序员
私信 提问
swift 接水果游戏ios源码

初学swift,写来练手的,游戏很简单 ,顾名思义就是接水果 ,菠萝不能接,接到一个水果得一分,接到菠萝扣五分,漏一个水果扣一分,初始分0分,当分数低于0分 就Game Over了,暂时适用5s的模...

lituanjieba
2016/03/15
43
0
fir.im Weekly - 30 天从 0 开始学 Swift

最近一周看到很多很好用的的轮子,忍不住推荐给大家。此外,本期 fir.im Weekly 还精选了一些实用的 iOS , Android , UI 动画的干货文章。让我们一起来看下: Hacking with Swift 由@稀土圈...

风起云飞fir_im
2015/11/05
98
0
图拉鼎:和 Swift 亲密接触的这半个月…

以下内容来自 @图拉鼎 的个人博客:http://imtx.me/archives/1905.html -------- 又是半个月没更新 Blog 了,这段时间主要在和 Swift 打交道。具体的说,主要是两件事情: 首先,在六月末时,...

oschina
2014/07/23
4.8K
22
Swift零基础教程2019最新版(一)搭建开发环境

Swift简单介绍 Swift是苹果强力推荐的新型开发语言,能开发苹果下属所有软件平台(iOS,iPadOS,macOS,watchOS,tvOS)初学者如果想进入苹果的开发体系,从Swift开始学习是最好的选择。 Swift开...

FlutterStudy
07/12
0
0
【原创】Swift服务启动架构分析

Swift中会用到三个非常有用的python模块它们分别是webob,eventlet,paste.deploy,其中webob提供了WSGI封装的Request,Response和其他的一些HTTP操作,eventlet是一个并行的网络编程库,Swift使...

zhouxingxing
2012/10/08
3.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
11分钟前
3
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
今天
4
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
今天
0
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部