Swift中如何在函数执行特定逻辑后终止后续代码运行?
Swift单例共享场景下的函数执行控制方案
问题说明
现有两个类共享MyClassA单例,当前MyClassB的work1方法中,遍历数组找到匹配项时会调用MyClassA.shared.work2(true),但后续仍会执行work2(false),导致同时传入true和false,不符合"仅执行其中一个操作后终止"的需求。
解决方案
方案一:本地标记变量(推荐)
通过在work1方法内新增本地布尔变量,记录是否已发送true值,以此控制后续逻辑是否执行:
class MyClassA { static let shared: MyClassA = MyClassA() var hasValue2: Bool = Bool() func work2(value: Bool) { hasValue2 = value print(value) } } class MyClassB { static let shared: MyClassB = MyClassB() private let array: [Int] = [0, 1, 2, 3, 4] func work1() { var sentTrue = false for item in array { if item == 2 { MyClassA.shared.work2(value: true) sentTrue = true break } } // 仅当未发送过true时,才执行false的调用 if !sentTrue { MyClassA.shared.work2(value: false) } } } // 使用场景 func startWork() { MyClassB.shared.work1() }
逻辑说明:本地变量sentTrue仅在当前work1执行周期内有效,不受外部对MyClassA属性的修改影响,能确保逻辑可靠性。遍历找到匹配项时,标记sentTrue为true并跳出循环;后续通过判断该标记,决定是否执行false的调用,保证两种操作只会触发一次。
方案二:依赖单例属性(单线程场景适用)
如果确定MyClassA的hasValue2属性不会被外部线程修改,也可以直接通过该属性判断:
class MyClassB { static let shared: MyClassB = MyClassB() private let array: [Int] = [0, 1, 2, 3, 4] func work1() { for item in array { if item == 2 { MyClassA.shared.work2(value: true) break } } // 检查单例属性,未设置true则执行false调用 if !MyClassA.shared.hasValue2 { MyClassA.shared.work2(value: false) } } }
注意事项:若存在多线程场景,其他线程可能在遍历结束后、判断前修改hasValue2,导致逻辑出错,因此仅推荐在单线程环境下使用。
内容的提问来源于stack exchange,提问作者swiftPunk
相关产品推荐
相关产品推荐

