Swift Tips

1. lazy新用法

在日常开发中,lazy常被用来标识懒加载,但是还可以用来避免多余开销,优化代码结构,案例如下:

    func test() {
        enum A {
            case a1
            case a2
            case a3
        }
        var a: A = .a2
        lazy var user = getUser()

        switch a {
        case .a1:
            print(user.name)
        case .a2:
            print(user.age)
        case .a3:
            print("other")
        }
    }

    func getUser() -> People {
        print("========")
        return People(name: "JC", age: 12)
    }
  1. 在上面的代码中,如果不使用lazy,如果对象a是a2,则还是会调用getUser()方法,造成没必要的开销;
  2. 如果将var user = getUser()分别放到case a1case a2中,则会造成代码臃肿;

2. callAsFunction

如果我们给一个类实现了callAsFunction方法,则该类的实例对象可以直接通过obj()的形式去执行callAsFunction方法。

extension String {
    public func callAsFunction(_ s: String) -> Self {
        return self + s
    }
}

// 调用
print("0"("123"))

输出
0123

3. 使用withExtendedLifetime扩展self的生命周期

self.closure = { [weak self] in 
    withExtendedLifetime(self) {
        // ...
    }
}

4. 图片Base64字符串转为图片Data

    func getCleanBase64String( _ base64String: String) -> Data? {
        let cleanStr = base64String
            .replacingOccurrences(of: "data:image/png;base64,", with: "")
            .replacingOccurrences(of: "data:image/jpeg;base64,", with: "")
        return Data.init(base64Encoded: cleanedBase64String, options: .ignoreUnknownCharacters)
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容