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

2,909 阅读2分钟

这份面试题是上海某互联网公司 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),在外部只能访问