如何在Swift函数中将表达式作为参数传递?

sar*_*rah 5 ios swift

我是初级iOS开发人员.我想重构我的代码.目前我想重构我的领域方法.为了保存或删除Realm中的数据,我需要在整个地方使用很多try try block,所以我想提供一个服务来处理这个问题.我试过但我不知道这是不是正确的方法

import RealmSwift

class RealmService {

    private init() {}
    static let shared = RealmService()

    var realm = try! Realm()

    func save(expression: ()) {

        do {
            try realm.write {

            // I want to pass the expression in this block here

                expression
            }
        } catch {
            post(error)
        }

    }


}
Run Code Online (Sandbox Code Playgroud)

用法:

func saveToRealmDatabase(wishList: WishList, product: Product) {


    RealmService.shared.save(expression: {
        // I want to pass expression in the block in here as argument
        wishList.products.append(product)
    }())



}
Run Code Online (Sandbox Code Playgroud)

我想将表达式wishList.products.append(product)作为RealmService类中函数的参数传递.有没有更好的方法来实现这一目标?

Swe*_*per 6

你的"表达式"可以用类型表示() -> Void- 一个不接受任何参数并且什么都不返回的闭包.

这是您的方法应该声明的方式:

func save(expression: @escaping () -> Void) {

    do {
        try realm.write {
            expression()
        }
    } catch {
        post(error)
    }

}
Run Code Online (Sandbox Code Playgroud)

这是你应该如何使用它:

func saveToRealmDatabase(wishList: WishList, product: Product) {


    RealmService.shared.save(expression: {
        wishList.products.append(product)
    })
}
Run Code Online (Sandbox Code Playgroud)