[swift-evolution] Proposal: Allow Getters and Setters to Throw

Chris Lattner clattner at apple.com
Sun Dec 6 00:07:27 CST 2015


>> On Dec 5, 2015, at 9:08 PM, Nikolai Vazquez via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> One of the aspects of Swift that I like is computed properties for structures and classes. It allows for adding logic when obtaining values or for having the returned value be 
> On Dec 5, 2015, at 7:17 PM, Matthew Johnson via swift-evolution <swift-evolution at swift.org> wrote:
> 
> +1 to this.  Subscripts should also be able to throw and currently cannot.

+1 from me as well.  Subscripts also currently cannot be generic.

I consider all of these implementation limitations, not intentional parts of the design of Swift.  Patches would be very very welcome to help improve these areas.

-Chris


> 
> dependent on another.
>> 
>> As of the `ErrorType` protocol introduction in Swift 2, we can throw errors when it comes to functions and initializers. However, this does not apply to getters and setters.
>> 
>> ```swift
>> struct File<Data> {
>>     var contents: Data {
>>         get throws { ... }
>>         set throws { ... }
>>     }
>> }
>> ```
>> 
>> A better example would be getting and setting the current working directory of the process:
>> 
>> ```swift
>> import Foundation
>> 
>> extension Process {
>>     static var workingDirectory: String {
>>         get {
>>             let fileManager = NSFileManager.defaultManager()
>>             return fileManager.currentDirectoryPath
>>         }
>>         set throws {
>>             let fileManager = NSFileManager.defaultManager()
>>             guard fileManager.changeCurrentDirectoryPath(newValue) else {
>>                 throw Error("...")
>>             }
>>         }
>>     }
>> }
>> 
>> 
>> 
>> ```
>> 
>> 
>>  _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151205/b565797f/attachment-0001.html>


More information about the swift-evolution mailing list