[swift-evolution] Pre proposal: Should there be a way to distinguish class instances from struct instances

ilya 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)
types.

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,
>
> Daniel
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151217/1b8aeadf/attachment.html>


More information about the swift-evolution mailing list