1.Swift 中的函数

 /// 函数的定义
///
/// - Parameters:
/// - x: 形参
/// - y: 形参
/// - Returns: 返回值
func sum(x: Int, y: Int) -> Int {
return x + y
}

    print(sum(x: 10, y: 20))

 
   /*
外部参数就是在形参前面加了一个字
外部参数不会影响函数内部的细节
外部参数会让外部调用看起来更加直观
外部参数如果使用了'_',在外部调用函数时,会忽略形参的名字
"_" 就是可以忽略任意不感兴趣的内容
*/
func sum1(num1 x: Int, num2 y:Int) -> Int { return x + y;
}

    print(sum1(num1: 10, num2: 20))

 
 func sum2(_ x: Int, _ y:Int) -> Int {
return x + y;
}
print(sum3())

设置默认值的函数

   // 默认值
func sum3(x: Int = , y: Int = ) -> Int {
return x + y
}
这里比较灵活

print(sum3(x: 10, y: 20))
print(sum3(x: 10))
print(sum3(y: 20))

 

无返回值的函数

  func demo1() {
print("哈哈")
} func demo2() -> (){
print("呵呵")
} func demo3() -> Void {
print("嘻嘻")
}

demo1()
demo2()
demo3()

 

2.闭包

 // 1.闭包,最简单的闭包
//n 如果没有参数,没有返回值 可以省略 连 in 都一起省略
// option + click
let b1 = {
print("hello")
}
b1()

    // 带参数的闭包
//闭包中,参数,返回值 实现的代码都是写在{}中
// 需要使用一个关键字 “in” 分隔定义和实现
// {形参列表 -> 返回值类型 in // 实现代码}
let b2 = {
(x: Int) -> () in
print(x)
} b2()
   //带参数 带会返回值的闭包
let b3 = {
(x: Int) -> Int in return x +
}
print(b3())

需要注意的是,

// 如果函数的最后一个参数是闭包 函数参数可以提前结束,最后一个参数直接使用{}包装闭包的代码

3.swift 解决循环引用的办法

  1.仿照OC 解决

  

 //弱引用的对象 又一次执行 nil的机会
weak var weakSelf = self
loadData { (result) in
print(result,weakSelf)
}
}
    //[weak self] 和 __weak typeof(self) 作用类似  -> 对象被回收是 内存地址会自动指向nil  更加安全 推荐使用这种方式
func methodInSwift1() {
loadData { [weak self] (result) in
print(result,self)
}
}
    // [unowned self] 和 __unsafe__retained作用类似  -> 对象被回收是 内存地址不会自动指向nil 会造成野指针访问

    func methodInSwift2() {

        loadData { [unowned self] (result) in
print(result,self)
}
}

Swift 中的基础语法(二)的更多相关文章

  1. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  2. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  3. JSP开发中的基础语法

    JSP 语法 JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代码片段 %> 或者 ...

  4. swift第一季基础语法

    同: 一.基础 同: 1常量和变量 2数据类型和数据类型转换 3别名 不同: 1可选类型optional 2BOOL类型 3元组类型 4断言Assertion 二.基本操作符 同: 1赋值和算术运算及 ...

  5. 从零开始学 Web 之 ES6(四)ES6基础语法二

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  6. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

  7. Linux入门第五天——shell脚本入门(中)基础语法之判断与条件

    一.判断式 利用 test 命令进行执行结果的判断(例如判断是否存在该文件):关于test  test:test 示例:结合回传值 $? 进行判断:关于$?:$? [root@localhost tm ...

  8. Python 1基础语法二(标识符、关键字、变量和字符串)

    一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...

  9. python基础语法(二)

    本文主要包括以下内容 函数 切片 迭代 列表生成式 生成器 迭代器 函数 定义函数 定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块 ...

随机推荐

  1. Git撤销&amp;回滚操作

    开发过程中.你肯定会遇到这种场景: 场景一: 糟了.我刚把不想要的代码.commit到本地仓库中了.可是还没有做push操作! 场景二: 彻底完了.刚线上更新的代码出现故障了.须要还原这次提交的代码! ...

  2. JavaScript操作符(关系操作符、相等操作符和条件操作符)

    关系操作符用于对两个值进行比较,返回一个布尔值.关系操作符包括大于(>),小于(<),大于等于(>=),小于等于(<=).当关系操作符用于非数值时,也要先进行数值的转换.如 v ...

  3. ASP.NET for WebApi

    WebApi,听说过吧?呵呵. 感觉比WebService,WCF要强.尤其是那个啥WCF,啥鬼东西,真难懂.真难搞.真难用. 说比WebService要强,是因为不用在本地先生成个代理.而且XML也 ...

  4. asp.net mvc + javascript导入文件内容

    .近期做的是对现有项目进行重构.WEB FROM改成MVC,其实也算是推倒重来了. 里面有一个导入功能,将文件上传.原先的做法是有一个隐藏的iframe,在这个iframe的页面中设置一个表单form ...

  5. C项目实践--图书管理系统(3)

    接下来将要实现用户管理模块的相关功能,用户管理模块的主要功能包括增加用户,查找用户以及保存用户等功能,查找用户时,如果查找成功,充许对查找到用户进行更新或删除操作.如果查找不成功,则给出相应的提示信息 ...

  6. C++ 函数部分(2)

    C++函数的递归调用 函数可以直接或间接地调用自身,称为递归调用.所谓直接调用自身,就是指在一个函数的函数体中出现了对自身的调用表达式,例如: void fun1(void) { //do somet ...

  7. ORA-09817

    连接数据库的时候报:ORA-09817:write to audit file,在网上搜索了下,发现时oracle安装目录下面的磁盘空间不够,有不少人给出了解决办法,下面即是一例: 连接oracle  ...

  8. jquery loop on Json data using $.each

    Hi I have the following JSON returned in a variable called data. THIS IS THE JSON THAT GETS RETURNED ...

  9. ABAP 邮件

    function zint_send_email.*"-------------------------------------------------------------------- ...

  10. 用 kGDB 调试 Linux 内核

    简介 这个文档记录了用kGDB调试Linux内核的全过程,都是在前人工作基础上的一些总结.以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台. 要使用KGDB来调试内核,首先需要修改conf ...