> On Oct 19, 2016, at 5:50 AM, David Goodine via swift-evolution 
> <[email protected]> wrote:
> 
> Hey all,
> 
> I don’t know if this is really an ‘evolution’ topic per se, and I’m not on 
> Swift Dev, but thought someone here could shed some light on this.
> 
> Often when developing code, if I need create mode switches (constant Bools) 
> so that I can move back and forth between different features/implementations 
> for testing, developing experimental features, migration, etc.  Currently if 
> I write the following:
> 
> let useFoo = true
> 
> if useFoo {
> // Foo code
> } else {
> // Non-Foo code
> }
> 
> I will get compiler warnings either way that there’s unreachable code based 
> on the value of useFoo.  That makes sense in most cases, but in some cases I 
> need to leave the code as is for a while, and I hate leaving long-standing 
> compiler warnings in production code.  (If it’s yellow, you need to pay 
> attention to it.)  So I poked around and discovered that if I use the 
> following declaration of useFoo, the warnings go away.
> 
> let useFoo = { return true }()
> 
> So, the question is, is this intentional? The compiler could certainly 
> ascertain that useFoo will always be true and carry out the same dead code 
> detection as for the first declaration.  If this isn’t intentional, and the 
> compiler may at some point optimize away the closure and trigger dead code 
> warnings, I might come up with a proposal that there is some idiom that 
> allows one to do the above without the warnings.  I’m really not a fan of 
> #define (because it’s just butt-ugly in such a beautiful language), but its 
> existence is unavoidable for some cases.  
> 
> And, as I write this, I realized I haven’t tried declaring useFoo as var, but 
> I expect that would trigger a warning that useFoo is not modified and should 
> be defined by let.  I think this is a use case that, for practical purposes, 
> should be covered to allow this type of evolution of code without generating 
> warnings.  If the current behavior is intentional and going to stay, then 
> that’s probably the best solution.
> 
> -d

You should use Active Compilation Conditions to create flags for conditional 
compilation you can check with #if. If you’re not yet using Xcode 8, you can 
manually define the flags under the Other Swift Flags build setting (e.g., 
-DUSEFOO).

Preston
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to