[swift-evolution] Cancelable named defer statements
    Rien 
    Rien at Balancingrock.nl
       
    Sat Jan  7 12:20:38 CST 2017
    
    
  
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170107/f3c2bc0f/attachment.html>
    
    
More information about the swift-evolution
mailing list