Я объяснил свой запрос в фрагменте кода ниже. Я ищу этот тип синтаксиса для взаимодействия Obj-C. В частности, я вижу разницу в поведении aCoder.encode(count, forKey: "count") API, когда count равен Int (необязательно) по сравнению с Int? (необязательный)
import Foundation
let num = 5
// Swift's type system will infer this as Int (non-optional)
print(type(of: num))
// Prints: Int
let optNum: Int? = 5
// This is explicitly typed as an optional Int
print(type(of: optNum))
// Prints Optional<Int>
Можно ли использовать литерал для неявного ввода var/let в необязательный?
// let imlicitOptional = 5?
// print(type(of: imlicitOptional))
// The above line should print: Optional<Int>
// or
// let imlicitOptional = num?
// print(type(of: imlicitOptional))
// The above line should print: Optional<Int>





Optional — это обычный enum не какой-то конкретный тип магии. Итак, вы можете создать значение, используя Optional:
let implicitOptional = Optional(5)
print(type(of: implicitOptional)) // Optional<Int>
Я не знаю, зачем вам это нужно, но вы можете сделать так
let opt = 5 as Int?
// or
let opt = Optional(5)
// or
let opt = 5 as Optional // thanks to vacawama for this
На самом деле вы даже можете создать оператор, который возвращает необязательный параметр, но я думаю, что это бесполезно.
postfix operator >?
postfix func >?<T>(value: T) -> T? {
return Optional(value) // or return value as T?
}
let a = 5>?
Литералы не имеют типов.