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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution