美文网首页iOS启蒙Ios自己面试总结iOS点点滴滴
Swift面试题收集和个人解答(长期更新)

Swift面试题收集和个人解答(长期更新)

作者: 一铭_ | 来源:发表于2016-06-27 15:59 被阅读916次

    这份面试题是上海某互联网公司 iOS 的面试题,同时欢迎把各位发 swift 的面试题给我

    1.swift中,如何阻止一个方法属性,属性,下标被子类改写?

    在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。

    2.swift中,实现一个将整形数组全部转化成对应的字符串数组(eg: [1,2,3,4,5] -> ["1","2","3","4","5"])

    var sampleArray: [Int] = [1,2,3,4,5]
    sampleArray.map {
        String($0)
    }
    //["1", "2", "3", "4", "5"]
    

    3.swift中,关键字 guard 和 defer 的用法

    guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。

      guard let name = self.text else {  return }
    

    defer的用法是,这条语句并不会马上执行,而是被推入栈中,直到函数结束时才再次被调用。

    defer {
       //函数结束才调用
    }
    

    4.使用 swift 中的泛型来编写一段交换两个值的函数

    func swapValue<T,U>(inout x: T, inout y: U) -> (x: U, y: T) {
        return (y, x)
    }
    
    var tuple = ("ab", 1)
    swapValue(&tuple.0, y: &tuple.1)
    //(1, "ab")
    //这块我自己对泛型了解不深,会继续更新
    
    
    ---Swift 3更新:
    func swapValue<T,U>(x: T, y:  U) -> (x: U, y: T) {
        return (y, x)
    }
    

    5.在 swift 中,对一个 optional 变量拆包有多少种办法?

    如果确定一个 optional 包含值,可以用 ! 来访问,就是强制拆包.
    尝试使用!来访问不存在值的optional value 会触发运行时错误。当!来强制拆包(force-unwrap)的时候,
    一定要确保这个optional value一定包含一个非nil 值。

    隐式拆包: 通过在声明时的数据类型后面加(!)来实现

    var str: String! = "Hello World!"
    //Hello World!
    

    更新, 感谢分享题目

    6. swift中怎么调OC代码

    在swift项目中创建一个OC文件的时候,Xcode 会提示创建一个桥接文件 点确定创建桥接文件,Xcode会自动创建一个桥接文件
    工程名-Bridging-Header.h
    把swift需要用到的OC文件的头文件放到桥接文件里 工程名-Bridging-Header.h

    7. open关键字和public关键字区别

    鉴于当前写时候是 Swift3.x, 现在共有5种权限控制关键字,之后 Swift4 又会有变化.

    • open
      open 修饰的 class 在 Module 内部和外部都可以被访问和继承
      open 修饰的 func 在 Module 内部和外部都可以被访问和重载(override)
    • Public
      public 修饰的 class 在 Module 内部可以访问和继承,在外部只能访问
      public 修饰的 func 在 Module 内部可以被访问和重载(override),在外部只能访问

    相关文章

      网友评论

      • ce70df11c8e3:上次面了一家 叫 上海波恩网络科技有限公司的,问了
        1. swift中怎么调OC代码
        2. open关键字和public关键字区别
        一铭_:@撸撸更健康 已经更新了,谢谢分享题目
      • sun猩猩:你这第四个 用了inout 还用return? 最好的写法“func swap<T>(inout a: T, inout b: T) {
        (a,b) = (b,a)
        }”
        sun猩猩:@石不帅_ 额 多元组 岂不是更优雅,更简洁
        一铭_:@sun猩猩 在 swift3里面这样写 我个人觉得还行
        func swapValue<T,U>(x: T, y: U) -> (x: U, y: T) {
        return (y, x)
        }

      本文标题:Swift面试题收集和个人解答(长期更新)

      本文链接:https://www.haomeiwen.com/subject/obbzdttx.html