[swift-evolution] Pre proposal: Should there be a way to distinguish class instances from struct instances
ilya.nikokoshev at gmail.com
Thu Dec 17 14:02:50 CST 2015
This does not seem very practical as there is a whole continuum of
behaviors between pure value (like Int) and reference (like UIWindow)
Consider for example
NSURL: an object, but immutable
Array: a struct, but doesn't take extra space if copied without mutation
Either<T, U>: an enum is similar to a struct, but may very well wrap a
mutable class instance
On Thu, Dec 17, 2015 at 3:23 PM, Daniel Steinberg via swift-evolution <
swift-evolution at swift.org> wrote:
> The way in which we reason about instances of value types and instances of
> reference types is significantly different and yet there is no way to
> easily distinguish them in Swift.
> In Objective-C, for example, if we have an NSDate and an NSTimeInterval we
> can tell that NSDate is a reference type and NSTimeInterval is a value type
> by looking at how it is used in code
> NSDate *myDate = //…
> NSTimeInterval someTimeInterval = //…
> The “*” helps us see that myDate is a pointer to an instance of NSDate.
> We see this in methods that return values as well
> - (NSString *)aStrringReturningMethod // …
> - (NSInteger)numberOfMistakesInThisEmail //...
> I realize that this is a result of Objective-C living in C’s world and we
> don’t have that constraint in Swift.
> However, this means that when the semantics of variables, parameters,
> properties, and return values from methods is not always clear in our code.
> Because structs can have methods in Swift it is all to easy to confuse an
> instance of a struct with an instance of a class.
> I may be alone here, but I think it would be less confusing if there were
> some way to distinguish between value types and reference types in code.
> Thank you,
> swift-evolution mailing list
> swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution