4 ms·
You still need to use ! inside that block, but you can use it confidently that it won't result in you accidentally unwrapping a null object.
by tpritc 11y ago
You still need to use ! inside that block, but you can use it confidently that it won't result in you accidentally unwrapping a null object.
- stormbrew 11y agoNo, you use checked instead of blah. If blah is type 'Blah?', Checked is type 'Blah'. Edit to add: And unless something has changed since I last tried it, you can also just shadow blah so that inside that scope you're referring to the unwrapped one: if let blah = blah { /* use blah here, it's unwrapped */ } It looks kind of silly, but I have used it where there was no better name for the unwrapped value.
- billconan 11y agothis doesn't look better than c++ syntax. I still don't understand the point of ! and ? less is more, swift ought to know.
- stormbrew 11y agoI don't think it's trying to be syntactically better than C++. It's an improvement in semantics. Once you unwrap an optional with "if let", it cannot cause an access violation. You seem to be insisting on using ! and then blaming the language for letting you shoot your foot off with it...
- billconan 11y agoSorry, I don't get it. the example you gave is like the following c++ code: XXX *object = null; if ((object = anotherpointer) != NULL) { ... } The point is, ! is only useful, when it can detect null pointers during compiling time. but it doesn't. the way ! is used, as suggested by your example, is also doable in C++, it is just a habit thing. in c++, with good habit, you won't have problem. in Swift with bad habit, you will have the same problem. then what good is !,
- stormbrew 11y agoNo, you don't seem to be getting what I'm saying. I'm saying don't use !, and showing you how to avoid using it in a common pattern. Using 'if let' instead of ! does give you compile time verification of correctness. ! is there for the small number of cases where that's not possible. And it makes it much more obvious where you've got a potential problem, because the '!' is a literal code smell. You can't really do that with c++.
- yoz-y 11y agoEver since the guard statement was introduced I think you should never, ever use the ! as operator. It still has some sense when using as a type, for example for IBOutlets.