Any chance at a 4.1 or a 4.2 round this year?

-- E

> On Jun 5, 2017, at 1:16 AM, Xiaodi Wu via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I hope so! We'll have to wait a bit for the core team to outline Swift 5 
> priorities.
> 
> 
> On Mon, Jun 5, 2017 at 00:24 Pranshu Goyal <pranshu.go...@novanet.net 
> <mailto:pranshu.go...@novanet.net>> wrote:
> Any hopes for it in future?
> 
> On 4 June 2017 at 20:40, Xiaodi Wu <xiaodi...@gmail.com 
> <mailto:xiaodi...@gmail.com>> wrote:
> No.
> 
> 
> 
> On Sun, Jun 4, 2017 at 10:07 Pranshu Goyal via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> Is this proposal in the pipeline for Swift 4?
> 
> On 1 April 2017 at 12:03, Adrian Zubarev via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> First, you should fix the indent in the code samples. Second, remove any 
> access modifier from inside a protocol. Third, we don’t support default 
> implementations directly inside protocols yet, so that’s a not valid example.
> 
> Now my personal concerns. As far as I can tell XIB files in an iOS Project 
> are meant for UIViewControllers in first place, but it’s a common case that 
> they are also used to create reusable UIViews. The downside of that abusage 
> is view hierarchy clustering. Most developer creating a view of Self in Self, 
> which smells to me like really bad code.
> 
> MyCustomView // This view is useless
>    + MyCustomView
>        + CustomSubview1
>    + CustomSubview1 // This is probably a dead IBOutlet
> In fact Xcode does not use the initializer from NSCoding to show a live 
> rendered view inside interface builder, instead it will call a UIViews 
> designated initializer init(frame:). That results that a lot of the developer 
> write similar code like in the following snippet:
> 
> // This pattern results in a similar view cluster like mentioned above
> 
> class MyCustomView : UIView {
>     override init(frame: CGRect) {
>         let view = loadSomehowFromNib()
>         self.addSubview(view)
>     }
> }
> To solve this problem we’d need some functionality of factory initializers. I 
> believe as proposed the factory initializer won’t solve that problem, because 
> everything would be still restricted to a special initializer annotated with 
> factory.
> 
> Personally I would want to write something like this instead.
> 
> class MyCustomView : UIView {
>      
>     override init(frame: CGRect) {
>          
>         // Instantiating from a Nib file will call `init(coder:​)` on 
> MyCustomView
>         self = loadSomehowFromNib() // assuming () -> MyCustomView
>          
>         //
>         self.frame = frame
>     }
> }
> This should resolve the clustering issue by assigning the returned instance 
> from the function to self and create a correct view hierarchy.
> 
> + MyCustomView
>        + CustomSubview1
> 
> 
> 
> -- 
> Adrian Zubarev
> Sent with Airmail
> 
> Am 17. März 2017 um 17:26:29, Riley Testut via swift-evolution 
> (swift-evolution@swift.org <mailto:swift-evolution@swift.org>) schrieb:
> 
>> Hi again everyone!
>> 
>> Now that Swift 4 Stage 2 proposals are being considered, I thought it might 
>> be time to revisit this proposal and see if it might align with the goals 
>> set forth for Swift 4.
>> 
>> As a quick tl;dr, this proposal describes a new "factory initializer" that 
>> would allow you to return a value from an initializer. This would have 
>> several benefits, as mentioned in the proposal itself as well as throughout 
>> this mailing list. For convenience, here's a link to the proposal on GitHub: 
>> https://github.com/rileytestut/swift-evolution/blob/master/proposals/NNNN-factory-initializers.md
>>  
>> <https://github.com/rileytestut/swift-evolution/blob/master/proposals/NNNN-factory-initializers.md>
>> 
>> Would love to hear any more comments on this proposal, and if we feel this 
>> is appropriate for considering for Swift 4 I'll happily re-open the pull 
>> request!
>> 
>> Riley Testut
>> 
>> On Nov 19, 2016, at 7:45 AM, arkadi daniyelian <ark...@icloud.com 
>> <mailto:ark...@icloud.com>> wrote:
>> 
>>> i would appreciate this feature.
>>> 
>>> For unexperienced developers, its often hard to recognize *when* factory is 
>>> a good fit to do the job, and how exactly approach the implementation. I 
>>> imagine having this feature built into the language may help to choose and 
>>> implement factory when its the right thing to do.
>>> 
>>>> On Nov 18, 2016, at 12:23 AM, Charles Srstka via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>> Is there any chance of reviving this? It seems to me that since this would 
>>>> require Swift initializers to be implemented internally in such a way that 
>>>> they can return a value (as Objective-C init methods do), it may affect 
>>>> ABI stability and thus may be germane to the current stage of Swift 4 
>>>> development.
>>>> 
>>>> Charles
>>>> 
>>>>> On Dec 17, 2015, at 3:41 PM, Riley Testut via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> 
>>>>> Recently, I proposed the idea of adding the ability to implement the 
>>>>> "class cluster" pattern from Cocoa (Touch) in Swift. However, as we 
>>>>> discussed it and came up with different approaches, it evolved into a 
>>>>> functionality that I believe is far more beneficial to Swift, and 
>>>>> subsequently should be the focus of its own proposal. So here is the 
>>>>> improved (pre-)proposal:
>>>>> 
>>>>> # Factory Initializers
>>>>> 
>>>>> The "factory" pattern is common in many languages, including Objective-C. 
>>>>> Essentially, instead of initializing a type directly, a method is called 
>>>>> that returns an instance of the appropriate type determined by the input 
>>>>> parameters. Functionally this works well, but ultimately it forces the 
>>>>> client of the API to remember to call the factory method instead, rather 
>>>>> than the type's initializer. This might seem like a minor gripe, but 
>>>>> given that we want Swift to be as approachable as possible to new 
>>>>> developers, I think we can do better in this regard.
>>>>> 
>>>>> Rather than have a separate factory method, I propose we build the 
>>>>> factory pattern right into Swift, by way of specialized “factory 
>>>>> initializers”. The exact syntax was proposed by Philippe Hausler from the 
>>>>> previous thread, and I think it is an excellent solution:
>>>>> 
>>>>> class AbstractBase {
>>>>>  public factory init(type: InformationToSwitchOn) {
>>>>>      return ConcreteImplementation(type)
>>>>>  }
>>>>> }
>>>>> 
>>>>> class ConcreteImplementation : AbstractBase {
>>>>> 
>>>>> }
>>>>> 
>>>>> Why exactly would this be useful in practice? In my own development, I’ve 
>>>>> come across a few places where this would especially be relevant:
>>>>> 
>>>>> ## Class Cluster/Abstract Classes
>>>>> This was the reasoning behind the original proposal, and I still think it 
>>>>> would be a very valid use case. The public superclass would declare all 
>>>>> the public methods, and could delegate off the specific implementations 
>>>>> to the private subclasses. Alternatively, this method could be used as an 
>>>>> easy way to handle backwards-compatibility: rather than litter the code 
>>>>> with branches depending on the OS version, simply return the 
>>>>> OS-appropriate subclass from the factory initializer. Very useful.
>>>>> 
>>>>> ## Protocol Initializers
>>>>> Proposed by Brent Royal-Gordon, we could use factory initializers with 
>>>>> protocol extensions to return the appropriate instance conforming to a 
>>>>> protocol for the given needs. Similar to the class cluster/abstract class 
>>>>> method, but can work with structs too. This would be closer to the 
>>>>> factory method pattern, since you don’t need to know exactly what type is 
>>>>> returned, just the protocol it conforms to.
>>>>> 
>>>>> ## Initializing Storyboard-backed View Controller
>>>>> This is more specific to Apple Frameworks, but having factory 
>>>>> initializers could definitely help here. Currently, view controllers 
>>>>> associated with a storyboard must be initialized from the client through 
>>>>> a factory method on the storyboard instance (storyboard. 
>>>>> instantiateViewControllerWithIdentifier()). This works when the entire 
>>>>> flow of the app is storyboard based, but when a single storyboard is used 
>>>>> to configure a one-off view controller, having to initialize through the 
>>>>> storyboard is essentially use of private implementation details; it 
>>>>> shouldn’t matter whether the VC was designed in code or storyboards, 
>>>>> ultimately a single initializer should “do the right thing” (just as it 
>>>>> does when using XIBs directly). A factory initializer for a View 
>>>>> Controller subclass could handle the loading of the storyboard and 
>>>>> returning the appropriate view controller.
>>>>> 
>>>>> Here are some comments from the previous thread that I believe are still 
>>>>> relevant:
>>>>> 
>>>>> 
>>>>>> On Dec 9, 2015, at 1:06 PM, Philippe Hausler <phaus...@apple.com 
>>>>>> <mailto:phaus...@apple.com>> wrote:
>>>>>> 
>>>>>> I can definitely attest that in implementing Foundation we could have 
>>>>>> much more idiomatic swift and much more similar behavior to the way 
>>>>>> Foundation on Darwin actually works if we had factory initializers.
>>>>> 
>>>>> 
>>>>>> On Dec 7, 2015, at 5:24 PM, Brent Royal-Gordon <br...@architechies.com 
>>>>>> <mailto:br...@architechies.com>> wrote:
>>>>>> 
>>>>>> A `protocol init` in a protocol extension creates an initializer which 
>>>>>> is *not* applied to types conforming to the protocol. Instead, it is 
>>>>>> actually an initializer on the protocol itself. `self` is the protocol 
>>>>>> metatype, not an instance of anything. The provided implementation 
>>>>>> should `return` an instance conforming to (and implicitly casted to) the 
>>>>>> protocol. Just like any other initializer, a `protocol init` can be 
>>>>>> failable or throwing.
>>>>>> 
>>>>>> Unlike other initializers, Swift usually won’t be able to tell at 
>>>>>> compile time which concrete type will be returned by a protocol init(), 
>>>>>> reducing opportunities to statically bind methods and perform other 
>>>>>> optimization tricks. Frankly, though, that’s just the cost of doing 
>>>>>> business. If you want to select a type dynamically, you’re going to lose 
>>>>>> the ability to aggressively optimize calls to the resulting instance.
>>>>> 
>>>>> 
>>>>> I’d love to hear everyone’s thoughts on this!
>>>>> 
>>>>> Best,
>>>>> Riley Testut
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> 
> 
> -- 
> Pranshu Goyal
> iOS Developer
> tlkn
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> 
> -- 
> Pranshu Goyal
> iOS Developer
> tlkn
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to