Затишна Галера
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Ko'proq ko'rsatish- Kanalning o'sishi
- Post qamrovi
- ER - jalb qilish nisbati
Ma'lumot yuklanmoqda...
Ma'lumot yuklanmoqda...
Друга ніч поспіль майже без сну на капітанському містку. Щоправда, якщо вчора Капітан мало спав через перезбудження справді шикарною презентацією від OpenAI, то сьогодні я не сплю тільки тому, що намагаюся хоч якось видавити щось цікаве з нудної презентац
enum Optional<Wrapped> {
/// The absence of a value.
case none
/// The presence of a value, stored as `Wrapped`.
case some(Wrapped)
}
🔣 Однак, замість того, щоб використовувати case .none, ви використовуєте nil, щоб вказати на відсутність значення. З огляду на це, ви можете визначити змінну з наведеним вище іменем за допомогою переліку:
let name = Optional.some("badlinkschannel")
print(name!.count)
🔣 Або ви можете використовувати switch-case так само, як і у випадку зі звичайним переліком:
func printName(_ name: String?) {
switch name {
case .some(let unwrappedValue):
print("Name is \(unwrappedValue)")
case .none:
print("Name is nil")
}
}
printName(nil) // Prints: "Name is nil"
printName("badlinkschannel") // Prints: "Name is badlinkschannel"
🔣 І якщо ви подивитеся на документацію, то побачите, що Optional має досить зручні методи. Чудовим прикладом є метод map:
let sideLength: Int? = Int("20")
let possibleSquare = sideLength.map { $0 * $0 }
print(possibleSquare) // Prints: "Optional(400)"
🔣 Або метод flatMap, який у цьому випадку повертає назву, тільки якщо вона пройшла перевірку на наявність принаймні 5 символів:
var name: String? = "badlinkschannel"
let validName = name.flatMap { name -> String? in
guard name.count > 5 else { return nil }
return name
}
print(validName) // Prints: "Optional("badlinkschannel")"
🔣 Розширення Optional
Тепер ви знаєте, що Optional визначається як перерахування; ви також можете писати розширення для неї!
Найпоширенішим прикладом є розширення опції String для обробки порожнього значення:
extension Optional where Wrapped == String {
var orEmpty: String {
return self ?? ""
}
}
var name: String? = "badlinkschannel"
print(name.orEmpty) // Prints: "badlinkschannel"
name = nil
print(name.orEmpty) // Prints: ""
Хоча ми використовували перерахування для визначення розширення, ми також можемо використовувати наступний синтаксис з використанням знаку питання:
extension String? {
var orEmpty: String {
return self ?? ""
}
}
3️⃣ Написання модульних тестів для Optional
Під час написання тестів є гарний спосіб працювати з Optional без примусового розгортання. Якщо ви будете використовувати примусове розгортання, ви ризикуєте спричинити фатальну помилку, яка зупинить виконання всіх ваших тестів.
Ви можете використати XCTUnwrap, яка видасть помилку, якщо значення дорівнює нулю:
func testBlogPostTitle() throws {
let blogPost: BlogPost? = fetchSampleBlogPost()
let unwrappedTitle = try XCTUnwrap(blogPost?.title, "Title should be set")
XCTAssertEqual(unwrappedTitle, "Learning everything about optionals")
}
4️⃣ Optional методи протоколу
Якщо ви мали досвід роботи з Objective-C, ви можете пропустити Optional методи протоколу. Хоча існує кращий спосіб імітувати таку поведінку у Swift за допомогою стандартних реалізацій протоколів, загальний спосіб у стандартних бібліотеках виглядає наступним чином:
@objc protocol UITableViewDataSource : NSObjectProtocol {
@objc optional func numberOfSections(in tableView: UITableView) -> Int
// ...
}
🔣 Це дозволяє викликати метод за допомогою знаку питання:
let tableView = UITableView()
let numberOfSections = tableView.dataSource?.numberOfSections?(in: tableView)
You can read more about protocol methods here: Optional protocol methods in Swift.
🔣 🔣 🔣 ПРОДОВЖЕННЯ В КОМЕНТАРЯХ 🔣🔣🔣
@Zatishna_Galera#iOSКомпас 🧭 4️⃣9️⃣ Завдання 49 Що таке Optionals та які особливості Optional ви знаєте? (part 1) Доброго дня шановні поціновувачі яблучних пиріжків. З вами ваш незмінний ios розробник Сергій з @badlinkschannel не забувайте підписатися. Optionals лежать в основі Swift і існують з першої версії мови. Optionals value дозволяє нам писати чистий код, водночас дбаючи про можливі нульові значення. Якщо ви новачок у Swift, вам слід звикнути до синтаксису додавання знаку питання до властивостей. Звикнувши до нього, ви можете почати отримувати від нього користь, наприклад, за допомогою розширень. Перш ніж ми зануримося у список речей, які вам слід знати, спочатку варто ознайомитися з основами. Властивості, методи та підскрипти можуть повертати необов'язкове значення, що в основному означає, що вони або повертають значення, якщо воно існує, або нульове значення. Кілька запитів можна об'єднати у ланцюжок, що називається ланцюжком опцій (Optional chaining). Це альтернатива примусовому розгортанню, про яке докладніше…
It’s time to I/O! Tune in to learn the latest news, announcements, and AI updates from Google.To watch this keynote with American Sign Language (ASL) interpr...