Swift相关面试题(一)

593 阅读4分钟

1、Swift是什么?Swift和Objective-C有什么不同?

  • Swift是Apple平台开发的开源编程语言,并在Linus上进行了扩展,而Objective-C不是开源编程语言,仅限于Apple
  • Swift语法简单、清晰、简洁。它使API易于阅读和维护,而Objective-C基于相对难以使用的C语言。
  • Swift更加理性和精确,这就是为什么它的代码数量更少且易于学习,而Objective-C代码的长度是Swift代码的两倍。
  • Swift可以编译成动态框架,而Objective-C不能编译成静态库和动态框架。

2、Swift中问号(?)的作用是什么?

  在Swift中问号(?)用于属性声明。它告诉编译器这个属性是可选的。该属性可能持有价值,也可能不持有。使用问号(?)访问该属性时,它可以避免运行时错误。这在可选链接中很有用。

func testA() {
        var optionalName: String? = "John"
        if optionalName != nil {
            print("your name is \(optionalName ?? "empty")")
        }
    }

3、Swift中的半开范围运算符是什么?

  Swift支持多种类型的运算符。其中之一是半开范围。半开范围运算符指定两个值ab(a<b)之间的范围,其中不包括 b。它被称为半开范围运算符,因为它仅包含其第一个值而不包含最终值

func testB() {
        for index in 1..<5 {
            print("打印:\(index)")
        }
    }
终端打印:1234

4、Swift中的函数是什么?

  函数是用于执行特定任务的代码集。它们允许您将代码组织成模块,以便重用、抽象和简化代码。函数可以接受输入参数并返回结果

func add(a: Int, b: Int) -> Int{
        return a + b
    }

5、Swift中的嵌套函数是什么?

  函数内部的函数称为嵌套函数,主要用途是:将复杂的功能拆分为更小的功能单元,提高代码的可读性和可维护性。此外,它们还可以访问外部函数的变量和常量,从而在某些情况下提供了一种更方便的方法来共享数据和逻辑。

func outerFunction(a: Int, b: Int) -> Int {
        func innerFunction(c: Int) -> Int {
            return a + b + c
        }
          return innerFunction(c: 7)
    }

6、Swift中的枚举是什么?

  枚举是一种定义一组相关值的数据类型。枚举可以包含零个或多个成员值,每个成员值都代表了一个特定的情况。枚举可以用来更清晰地表示代码中的数据结构,提高代码的可读性和可维护性

// 定义一个枚举表示四个基本方向
enum Direction {
    case north
    case south
    case east
    case west
}
// 定义一个变量,存储一个方向
let currentDirection: Direction = .north
// 使用switch语句匹配枚举成员值
func testC() {
        switch currentDirection {
        case .north:
            print("Going north")
        case .south:
            print("Going south")
        case .east:
            print("Going east")
        case .west:
            print("Going west")
        }
    }

7、Swift中的正则表达式和响应者链是什么?

正则表达式:一种用于描述字符串模式的强大工具,它可以帮助你在文本中查找、匹配和提取特定模式的字符串。 Swift标准库提供了内置的正则表达式支持,您可以使用NSRegularExpression类来创建和操作正则表达式。

func testD() {
        let input = "Hello, world!This is a test string."
        do {
            // 创建一个正则表达式模式,用于匹配一个空格和一个字母a之间的字符串
            let pattern = "is\\s+a"
            // 根据模式创建一个正则表达式对象
            let regex = **try** NSRegularExpression(pattern: pattern)
            // 在输入字符串中查找匹配项
            let matches = regex.matches(**in**: input, range: NSRange(input.startIndex..., in: input))
            // 遍历匹配项并打印结果
            for match **in** matches {
                let range = Range(match.range, in: input)!
                let matchedString = input[range]
                print("Found match: \(matchedString)")
            }
        } catch {
            print("Error creating regular expression: \(error)")
        }
    }
    终端打印:Found match: is a

响应者链:是iOS开发中的一个重要概念,它用于处理事件传递和响应。

  在iOS中,视图对象(如按钮、文本框等)可以接收用户交互事件,并且这些事件会通过响应者链进行传递。

  当用户触发一个事件时,iOS系统会从事件发生的视图开始,沿着响应者链向上寻找第一个能够响应该事件的对象,并将事件传递给它

  这个对象可以是视图本身,也可以是视图的父视图、父视图的父视图,以此类推,直到找到一个能够响应事件的对象或者到达应用程序的根视图控制器。

class CustomView: UIView {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("CustomView received touchesBegan event")
        next?.touchesBegan(touches, with: event)
    }
}


class ViewController: UIViewController {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("ViewController received touchesBegan event")
        super.touchesBegan(touches, with: event)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let customView = CustomView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        customView.backgroundColor = .orange
        self.view.addSubview(customView)
    }
}
终端打印:
CustomView received touchesBegan event
ViewController received touchesBegan event