Unwrapping !, cause crash SwiftUI [closed] - swift

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 days ago.
Improve this question
Image(uiImage: image ?? UIImage(named: "photo")!)
.resizable()
.frame(width: 300, height: 300)
Crash error
Implicity unwrapped nil value
How can I unwrap this?

How can I unwrap this?
According to the error message, you've got an implicitly unwrapped nil value. That is, you have some variable declared like:
var image: UIImage! = ...
You should only ever use implicit unwrapping when you know for certain that the object will exist as soon as the variable is initialized, and that it will continue to exist for the life of the variable.
The way to fix your problem is to either ensure that the object exists, which is not currently the case since you're getting nil, or stop using implicit unwrapping. You could, for example, change your variable declaration to something like:
var image: UIImage? = ...
Then you'd have a regular optional that you could attempt to unwrap normally as you're doing in the first line of your question.

Related

Swift - Taking a variable set as an array out of a function [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
How can I fix this error, while still keeping the value of the array the same? Here's a screenshot of my code:
var group_array is defined out of VStack scope.
I suggest using #State in order to store group_array.
#State var group_array: Array
var body: some View {
....
If I have understood correctly the question, and the problem... you have to set var group_array as a property of the class.
This way you could access it in the Firestore function, and read it in body view.

What do these characters in Swift mean <>. If I wrapped a keyword In them, what would that mean exactly [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
For example if I have:
var hostingController: UIHostingController<Content>! = nil
What does it example mean when I put content inside the greater than and less than signs?
It's a generic definition. Generics are useful when you’re writing code that could be applied to many different types.
For example, that means that UIHostingController could be initialised with any view.
hostingController = UIHostingController.init(rootView: ContentView())
struct ContentView: View {
var body: some View {
Text("some text")
}
}
Hope this is helpful!

There is no Swift -like syntax of Java ‘SuppressWarnings("unchecked")’ [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
code:
note.userInfo as! NSDictionary
warning:
Cast form '[NSObject : AnyObject]?' to unrelated type 'NSDictionary' always fails
To say
let userInfo = note.userInfo as! NSDictionary
is silly, as this is already an NSDictionary. But it could be nil, so it is an Optional wrapping a dictionary. So you need to unwrap it. If you are certain there is a userInfo, then say
let userInfo = note.userInfo!
If you are not sure, then unwrap safely.

Swift word count fatal error [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 7 years ago.
Improve this question
I am working on a word count function in textViewDidChange. As soon as I type it crashes. When I paste in a sentence, the debugger shows it is getting the word count, but it is crashing when adding the count to the button title with a fatal error: unexpectedly found nil while unwrapping an Optional value.
func textViewDidChange(textView: UITextView) {
let wordCount = textView.text.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).count
let words = String(format: "%d", wordCount)
countButton.title = "\(words)"
}
Make sure your countButton is non-nil (check the outlet connection).
Also, the variable in your string interpolation, count, does not seem to be defined - maybe an ivar that is still nil?
Edit:
As it turns out, your countButton is in fact nil and programmatically created. I suspect a definition like so:
weak var countButton : UIButton!
As well as an initialization like so:
self.countButton = UIButton()
The problem is then, that the weak modifier tells the system to not hold ownership of the object. Thus, it immediately gets deallocated after creation.
Try this instead:
let button = UIButton()
self.view?.addSubview(button)
self.countButton = button
The variable wordCount also has a warning saying it was never mutated, consider changing it to let. I assumed var was the was the way to go since the count would change
The count might change. But the value of the variable wordCount will never change, at least in the code you show. The only thing you ever do with it, having created it, is print it. Thus, it should be a let variable, as the compiler suggests.

How do I resolve this circular reference initialization error?

I have a class Question with a nested struct MultipleChoiceAnswers. When initializing Question, I initialize MultipleChoiceAnswers as well, giving it a reference to the Question instance. I then want to assign the MultipleChoiceAnswers instance to the property answers of the Question instance.
Here's an overview:
struct Answer {
let value:Double;
let isCorrect:Bool;
}
class Question {
struct MultipleChoiceAnswers {
let question:Question;
let answers:[Answer];
}
let answers:MultipleChoiceAnswers;
init( possibleAnswersCount:UInt ) {
let answers:[Answer];
/*
here I generate some Answer instances
that get appended to the answers Array
*/
self.answers = MultipleChoiceAnswers( question: self, answers: answers ); // <-- error
}
}
However, this results in the error:
Variable 'self.answers' used before being initalized
This makes sense. Can I resolve this error somehow, though? I was thinking of resolving this with weak or unowned (preferably the latter, since it should be a strong guaranteed non-nil reference), but I don't think I completely understand the logic yet, because changing MultipleChoiceAnswers to:
struct MultipleChoiceAnswers {
unowned let question:Question;
let answers:[Answer];
}
... does not resolve the error.
How can I resolve this error, while keeping a strong guaranteed non-nil circular reference?
P.S.: to be honest, I'm not even entirely sure yet whether I actually need this circular reference to begin with, but since this tentative implementation raised this error, I got curious about a possible resolution anyway.
Just add ! here:
let answers:MultipleChoiceAnswers!
answers needs to have a value prior to passing self to another function. By declaring answers to be an implicit unwrapped optional, you give it the default value of nil. That meets the requirement, and off you go. Since you do give it a value before init finishes, you'll never have trouble with accidentally unwrapping a nil. (But of course you should always be careful with !.)
This is discussed in "Unowned References and Implicitly Unwrapped Optional Properties" in the Swift Programming Guide.