added basic info about type safety and optionals (#27860)

* added basic info about type safety and optionals

* add link for optionals, renamed links and title  

also renamed the directory folder

* added basic info about type safety and optionals

added optionals link and renamed links and directory

* added basic info about type safety and optionals

added optionals link and renamed links and directory

* added basic info about type safety and optionals

also added "swift optionals" link and renamed original link to "type safety and type inference" and also renamed directory

* added basic info about optionals

added link to swift optionals and change the name of the first link and the directory

* added info on swift optionals

renamed links and directory folder

* added info about type safety and optionals

added a link to swift optionals and change folder name and a link's name to type safety and inference

* added info about optionals

added a link to optionals docs, change link and folder name to "type safety and inference", similarly with the title tag

* Update index.md

* Update index.md

* added info on swift optionals and type safety

altered link and directory names and added a link to optionals docs

* added info for swift type-safety and optionals

changed link and directory name to type safe and inference
added link to swift optionals doc

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* Update guide/english/swift/type-safety-and-inference/index.md

Co-Authored-By: Tom <20648924+moT01@users.noreply.github.com>

* changed the directory name to match the title

* modified folder name to have the proper format :-)
This commit is contained in:
H3r0Complex
2019-06-24 08:35:17 -07:00
committed by Tom
parent 4392455ff7
commit 55dc8dde95
2 changed files with 89 additions and 25 deletions

View File

@ -1,25 +0,0 @@
---
title: Type Inference
---
## Type Inference
Swift uses type inference. So if you write some code like the code in the example below its pretty obvious what each type is.
#### Example:
```swift
let iPhone: String = iPhone
let yearIntroduced: Int = 2007
let isAwesome: Bool = true
```
So we can clean up the code to look like the example below, and Swift can infer the type for use.
#### Example:
```swift
let iPhone = iPhone // Inferred as String
let yearIntroduced = 2007 // Inferred as Int
let isAwesome = true // Inferred as Bool
```
#### More Information:
- <a href='https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html#ID322' target='_blank' rel='nofollow'>The Swift Programming Language</a>

View File

@ -0,0 +1,89 @@
---
title: Type Safety, Inference, and Optionals
---
## Type Inference
Swift uses type inference. So if you write some code like the code in the example below its pretty obvious what each type is.
#### Example:
```swift
let iPhone: String = iPhone
let yearIntroduced: Int = 2007
let isAwesome: Bool = true
```
So we can clean up the code to look like the example below, and Swift can infer the type for use.
#### Example:
```swift
let iPhone = iPhone // Inferred as String
let yearIntroduced = 2007 // Inferred as Int
let isAwesome = true // Inferred as Bool
```
## Type Safety
Swift is a "type-safe" language. This means that by design the language helps programmers be more clear about the types they are using and helps mitigate and/or prevent common type errors - like trying to pass a string where it requires an integer. One core mechanism of this type-safe design are Optional Types.
## Optional Types
When a variable's type is an optional type it denotes that its value can have a value **_or_** no value at all (nil).
You declare an optional by appending a question mark at the end of the type declaration.
```swift
var optionalFloat: Float? // This is an Optional Float
var optionalString: String? = "an optional string" // and an Optional String
let normalFloat: Float = 0.5 // This is an ordinary Float
var normalString = "a string" // and a String
```
**Note:** since optionalFloat is not assigned a value it is given a default value of nil
### Unwrapping Optionals
Optionals are considered a different type then its non-optional variant. For example in the above code "optionalFloat" and "normalFloat" are _not_ the same type. When you try to access an optional variable like you would a normal variable the value would be of Optional(_SomeValue_).
```swift
var optionalInt: Int? = 5
let normalInt = 10
print(optionalInt) // Optional(5)
```
If you try to utilize the optional variable like normal you will get an error.
```swift
let sumError = normalInt + optionalInt //error!
```
Instead you must first "unwrap" the optional before you can utilize the data. There are a couple of ways doing so: forced unwrapping it and optional binding.
#### Forced Unwrapping
If you are **certain** that an optional does contain a value, you can force-unwrap it by appending an exlamation mark at the end of it.
```swift
if(optionalInt != nil) { // make sure the optionalInt has a value, otherwise will get a runtime error
let sum = normalInt + optionalInt! // <-- forced unwrapped
}
```
#### Optional Binding
Optional Binding is a special kind of condition statement (either with an if or a while) at which it automatically unwraps an optional if it has a value, and then stores that value in the designated variable. That variable can then be utilized within the if/while statements body normally.
```swift
if let unwrappedInt = optionalInt {
let sum = normalInt + unwrappedInt; // 15
}
```
If the optional does not have a value (nil), then the condition would be considered false and its code would not execute and the program will continue on normally.
#### More Information:
- [Type-Safety and Type Inference](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html#ID322)
- [Swift Optionals](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html#ID330)