swift初学总结
2020-03-01 11:37
399 查看
自从苹果公司发布了新的编程语言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
}
[/code]
函数类型:一个函数可以看作一个类型,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类型约束强
[/code]
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菜鸟中。。。。
待续。。。
[/code]
转载于:https://my.oschina.net/u/1450816/blog/302499
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- iOS编程语言 swift 语言初学总结
- Swift 集合类型(Collection Type) 之 数组(array)(官方文档翻译及总结)
- iOS初学知识总结
- Swift 3 迁移工作总结
- oracle初学知识点总结
- swift学习一月总结
- abap初学总结2
- Swift字符串常用操作总结
- 初学swift笔记运算符(二)
- 初学git之路问题总结
- 初学Java总结
- 初学字符串数组的个人总结
- swift学习笔记(六)——基础语法的总结
- 初学java总结
- iOS开发之swift-总结点
- Swift 语法学习总结
- 学习swift问题总结
- 初学java的小总结
- 栈和队列初学总结
- wince的初学总结