zoukankan      html  css  js  c++  java
  • Swift面试题

    1.声明一个只有参数没有返回值的闭包的别名:

    import UIKit
    
    // 1.声明一个只有参数没有返回值的闭包的别名
    typealias myBlock = (_ num1: Int, _ num2: Int) -> ()
    
    class ViewController: UIViewController {
    
        // 1>定义闭包
        var block: myBlock? = nil
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 2>实现闭包
            self.block = { (_ num1, _ num2) in
                print("str = (5)")
            }
            // 3>调用闭包
            _ = block!(4, 6);
            print("block执行完了...")
        }
    }

    2.Optional(可选型)是怎么实现的:

    Optional类型表示: 有值 / 没有值

    在Objective-C中并没有Optional类型, 只有nil,并且nil只能用于表示对象类型无值,

    并不能用于基础类型(int, float),枚举和结构体,基础类型需要返回类似NSNotFound的特殊值来表示无值,

    所以在Swift中定义了Optinal类型来表示各种类型的无值状态,并规定了nil不能用于非可选的常量和变量,只能用于Optinal类型.

    基本用法:

    var serverResponseCode: Int? = nil
    // serverResponseCode 现在不包含值
    
    serverResponseCode = 404
    // serverResponseCode 包含一个可选的 Int 值 404 
    
    Int? 表示serverResponseCode可以是有值的也可以是无值的
    
    
    var surveyAnswer: String?
    //surveyAnswer 被自动设置为 nil

    可选绑定:

    if let constantName = someOptional {
         print("get the value: (constantName)")
    }
    
    
    //如果someOptional这个optional类型有值,创建一个叫做constantName的常量并将someOptional包含的值赋给它。
    //并且因为constantName已经被optional类型包含的值初始化过,所以不需要再使用 ! 后缀来获取它的值。

    强制解析/解包 ( forced unwrapping )

    当确定可选类型确实包含值之后,可以在可选的名字后面加一个感叹号( ! )来获取值;

    当Option == nil时,使用 ! 来获取会导致运行时错误。所以使用 ! 来强制解析值之前,一定要确定Option类型不是nil的

    隐式解析可选类型 ( implicitly unwrapped optionals )

    有时候在编写程序中,一个optional类型第一次被赋值后,可以确定它以后总会有值,

    在这种情况下,使用它时每次都还需要判断和解包optional类型是非常低效的,因为可以确定它总会有值,

    所以Swift中定义了一个隐式解析可选类型,它在使用时可以自动解析;

    把( String? )改成感叹号( String! )就可以声明一个隐式解析可选类型。

    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! // 需要惊叹号来获取值
    
    
    let assumedString: String! = "An implicitly unwrapped optional string." 
    let implicitString: String = assumedString // 不需要感叹号

    但是需要注意:

    • 如果你在隐式解析可选类型没有值的时候取值,会触发运行时错误,

    这和你在无值的普通Optional类型后面加一个惊叹号的情景一样;

    • 如果一个变量以后还可能变成 nil 的话,不要使用隐式解析可选类型;

    • 并且如果需要在变量的生命周期中判断是否 是 nil 的话,请使用普通可选类型;

    可以理解为隐式解析可选类型用于声明初始化时可能为nil,但之后会立刻被赋值,并且不会再变成nil的Optional类型对象

     3.[1,2,3].map{$0 * 2}代码使用了哪些语法糖:

     // 3.对当前数组运用闭包内的规则然后返回一个新的数组:
            let arr = [1,2,3].map{$0 * 2}
            print(arr) // [2,4,6]
    1. [1, 2, 3] 是阵列的語法糖,意義為字面上表示為 Array<Int> 的陣列。
    2. Trailing Closures。如果一個函數的最後一個參數是閉包時,則可以不寫 ()
    3. 省略閉包參數的類型聲明,其被推斷為 Int
    4. $0 表明是陣列中的每一個元素,省略了閉包參數的命名。
    5. 省略了閉包回傳值類型的聲明,其被推斷為 Int
    6. 若閉包只有一行,則可以省略 return

     4. Set 独有的方法有哪些?

    Set 可以有交集,并集数学方法,同時如果使用类似 let set = Set([1, 1, 1, 2]) 的方式可以过滤重复的元素,也就是说 set 中最终只会有 1, 2,使用的前提条件是 Element 要遵循 Hashable

     
    无意中看到一个Swift更全面的面试题: http://www.jianshu.com/p/fa4a8659d036
  • 相关阅读:
    替换URL传递的参数
    执行SQl语句得到xml结果集
    table中文本太长换行
    org.xml.sax.SAXNotRecognizedException
    WAMP+CMSeasy快速搭建学校网站
    推荐几个web前台开发的小工具
    来园子里注册啦
    C++ Virtual的背后
    Games101观后补充笔记
    Lua语法入门
  • 原文地址:https://www.cnblogs.com/pengsi/p/6640744.html
Copyright © 2011-2022 走看看