What the meaning of question mark '?' in swift?

IosSwift

Ios Problem Overview


In Swift programming I found some question marks with objects.

var window: UIWindow?

Can anybody explain the use of it?

Ios Solutions


Solution 1 - Ios

> You can use if and let together to work with values that might be > missing. These values are represented as optionals. An optional > value either contains a value or contains nil to indicate that the > value is missing. Write a question mark (?) after the type of a value > to mark the value as optional.

> If the optional value is nil, the conditional is false and the code in > braces is skipped. Otherwise, the optional value is unwrapped and > assigned to the constant after let, which makes the unwrapped value > available inside the block of code.

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/pk/jEUH0.l

For Example:

var optionalString: String? = "Hello"
optionalString == nil
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

In this code, the output would be Hello! John Appleseed. And if we set the value of optionalName as nil. The if conditional result would be false and code inside that if would get skipped.

Solution 2 - Ios

Question marks after a type refer to Optionals, a way in Swift which lets you indicate the possibility that a value might be absent for any type at all, without the need for special constants.

It's used in the same situations you'd explicitly return nil in Objective-C, when there is no object to be returned, or for values that are not objects, constants such as NSNotFound. Optionals provide a consistent way of achieving this across all data types.

From the Apple provided iBook

> You use optionals in situations where a value may be absent. An > optional says: > > - There is a value, and it equals x > > or > > - There isn’t a value at all > > Here’s an example. Swift’s String type has a method called toInt, > which tries to convert a String value into an Int value. However, not > every string can be converted into an integer. The string "123" can be > converted into the numeric value 123, but the string "hello, world" > does not have an obvious numeric value to convert to.

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber is inferred to be of type "Int?", or "optional Int"

> Because the toInt method might fail, it returns an optional Int, > rather than an Int. An optional Int is written as Int?, not Int. The > question mark indicates that the value it contains is optional, > meaning that it might contain some Int value, or it might contain no > value at all. (It can’t contain anything else, such as a Bool value or > a String value. It’s either an Int, or it’s nothing at all.)

There is a whole section on the language reference iBook on Optionals, and they are mentioned several times throughout the book. You should have a thorough look at it, since it's a fundamental concept of Swift programming, and one that is not prevalent in many other languages.

Solution 3 - Ios

the optional Value of the type .

For Ex : the optional version of the type casting operator : as? ,mean as use for the type casting with might be optional to cast .

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRajneesh071View Question on Stackoverflow
Solution 1 - IosSalman ZaidiView Answer on Stackoverflow
Solution 2 - IosCezarView Answer on Stackoverflow
Solution 3 - IosKumar KLView Answer on Stackoverflow