Its probably better to use a Boolean variable close_file to "cancel" it, rather than change the entire language.
func openFile(kind: String) -> UnsafeMutablePointer<FILE>? { var file = fopen("MyFile.txt", "r") var close_file = true defer { if close_file { fclose(file) }} // <-- if fileIsNotValid(file) { return nil } if fileDoesNotContainsData(file, kind) { return nil } if fileDataOutOfDate(file) { return nil } // Prevent the deferred handler from closing the file close_file = false // <-- return file } On Sat, Jan 7, 2017 at 1:20 PM Rien via swift-evolution < swift-evolution@swift.org> wrote: > Is there any interest in a proposal to introduce a named defer statement > that can be cancelled? > > Lately I find myself writing this kind of code: > > func openFile(kind: String) -> UnsafeMutablePointer<FILE>? { > > > var file = fopen("MyFile.txt", "r") > > > var closeFile = true > > defer { if closeFile { fclose(file) } } > > > if fileIsNotValid(file) { return nil } > > if fileDoesNotContainsData(file, kind) { return nil } > > > if fileDataOutOfDate(file) { return nil } > > > // Prevent the deferred handler from closing the file > closeFile = false > > return file > } > > Which imo would be much cleaner if we were able to write: > > func openFile(kind: String) -> UnsafeMutablePointer<FILE>? { > > var file = fopen("MyFile.txt", "r") > > CLOSE_FILE: defer { fclose(file) } > > if fileIsNotValid(file) { return nil } > > if fileDoesNotContainsData(file, kind) { return nil } > > if fileDataOutOfDate(file) { return nil } > > // Prevent the deferred handler from closing the file > cancel CLOSE_FILE > > return file > } > > Regards, > Rien > > Site: http://balancingrock.nl > Blog: http://swiftrien.blogspot.com > Github: http://github.com/Swiftrien > Project: http://swiftfire.nl > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution