美文网首页2022swift 面试大全
Swift面试问题(一)

Swift面试问题(一)

作者: Jack小麻雀_ | 来源:发表于2022-09-15 14:43 被阅读0次

    遇见的swift问题合集,不定期更新,现在找工作还是比较难,机会少的可怜。

    1.逃逸闭包是什么有什么用?
    @escaping修饰的闭包是逃逸闭包
    所在函数结束后才会调用的闭包,必须添加@escaping关键字,不然编译报错

    func methodCallback(closure: @escaping () -> Void) {
        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
            closure()
        }
    }
    
    print("start at \(Date.now)")
    methodCallback {
        print("callback at \(Date.now)")
    }
    

    2.如何实现定义一个方法只有元素为String类型的Array才能调用?
    在extension声明的时候使用where关键字

    public extension Array where Element == String {
        //只有Array[String]能调用这个方法
        func jk_convertToString() -> String {
            var str = ""
            for ele in self {
                str = str + ele + ","
            }
            return str
        }
    }
    
    var arr = [String]()
    arr.append("abc")
    arr.append(“456")
    //成功编译
    let res = arr.jk_convertToString()
    print(res)
    
    // 编译报错
    //let ages = [1, 2, 3, 4, 5]
    //ages.jk_convertToString()
    

    3.swift中protocol如何实现optional?
    有两种方案:
    3.1 协议添加@objc
    3.2 使用extension对协议进行扩展

    扩展知识:
    1.什么是尾随闭包?
    闭包作为方法的最后一个参数时,就是尾随闭包。在调用的时候可以有一些简略的写法,最主要的功能应该是炫技。

    //尾随闭包,定义一个方法,最后一个参数是闭包
    func methodWithClosure(closure:(_ info: String) -> Void) {
        closure("info from closure")
    }
    
    //普通的写法
    methodWithClosure { info in
        print(info)
    }
    
    //这是尾随闭包的写法
    methodWithClosure() {info in
        print(info)
    }
    
    //如果闭包内实现只有一行代码,可以这样简写(装逼)
    methodWithClosure() { print($0) }
    

    2.什么是范型?
    范型看起来很高大上,可以理解成占位符。在方法名后边加上<T>,后边的参数类型都可以设置为T,看一下例子很快就能理解。

    func showYourSelf<T>(param: T) {
        //打印入参的类型
        print("This is \(T.self)")
    }
    
    var arr = [String]()
    arr.append("abc")
    arr.append("456")
    showYourSelf(param: arr)
    
    var str = "a string"
    showYourSelf(param: str)
    
    var dic = ["key":"value"]
    showYourSelf(param: dic)
    
    /*
    输出结果
    This is Array<String>
    This is String
    This is Dictionary<String, String>
    */
    

    相关文章

      网友评论

        本文标题:Swift面试问题(一)

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