import Cocoa

struct Foo {

    var keys = ["z","y","x"]

    {

        didSet {

            keys.sort()

        }

    }



    init(keysAndValues:Dictionary<String, String>) {

        self.keys.append(contentsOf: keysAndValues.keys)

    }

}


let keysAndValues:Dictionary<String,String> = ["c":"c", "b":"b", "a":"a"]

var foo = Foo(keysAndValues: keysAndValues) // `let foo` is the same result


foo.keys.forEach { print($0) }

/*

 prints

 z

 y

 x

 b

 c

 a

*/


Above code doesn't call `didSet` in playground. My .swift file is similar
and didn't call `didSet` either. However, if without a struct, `didSet` is
called.


var keys = ["z","y","x"]

{

    didSet {

        keys.sort()

    }

}


let keysAndValues:Dictionary<String,String> = ["c":"c", "b":"b", "a":"a"]

keys.append(contentsOf: keysAndValues.keys)



keys.forEach { print($0) }

/*

 prints

 a

 b

 c

 x

 y

 z

 */



*Xcode 9.0 beta 2 (9M137d)*


*Apple Swift version 4.0 (swiftlang-900.0.45.6 clang-900.0.26)*

*Target: x86_64-apple-macosx10.9*


*macOS Sierra 10.12.5 (16F73)*



Zhao Xin



On Fri, Jul 7, 2017 at 11:52 PM, Jordan Rose <jordan_r...@apple.com> wrote:

> It definitely should. Can you show the code where it wasn’t being called?
>
> Thanks!
> Jordan
>
>
> On Jul 7, 2017, at 00:31, Zhao Xin via swift-users <swift-users@swift.org>
> wrote:
>
> Should Array's `append(_)` functions cause the array's `didSet`?
> In my own test, it did call `didSet` in Playground. But in .swift files,
> it didn't call.
>
> Is this a known bug or something? Which is correct?
>
> Xcode Version 9.0 beta 2 (9M137d)​
>
> swift --version
> Apple Swift version 4.0 (swiftlang-900.0.45.6 clang-900.0.26)
> Target: x86_64-apple-macosx10.9
>
>
> Zhao Xin
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>
>
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to