Sobes.tech
Middle

Ինչպես է Swift-ում իրականացվում բացումը (ընտրանքային, պայմաններ և այլ մեխանիզմներ)։

sobes.tech AI

Պատասխան AI-ից

Swift- ի օպցիոնալները ներկայացնում են տիպ, որը կարող է պարունակել կամ T տիպի արժեք (փաթեթավորված արժեք), կամ nil, ինչը նշանակում է արժեքի բացակայություն:

Օպցիոնալների հետ աշխատելու հիմնական մեխանիզմները՝

  1. Օպցիոնալների կապում (if let, guard let)՝ Անվտանգ կերպով արժեք ստանալ օպցիոնալից:

    • if let: Ստանում է արժեքը և վերագրում ժամանակավոր կոնստանտային կամ փոփոխականին, եթե օպցիոնալը պարունակում է արժեք: Կոդը կատարվում է միայն այդ դեպքում:
      let optionalString: String? = "Hello"
      if let unwrappedString = optionalString {
          // unwrappedString ունի `String` տիպ
      }
      
    • guard let: Ստանում է արժեքը: Եթե օպցիոնալը nil է, կատարվում է else բլոկը (հաճախ՝ ընթացիկ scope-ից դուրս գալու համար): Եթե արժեքը հաջողությամբ ստացվի, այն հասանելի է guard-ից հետո:
      func processString(_ optionalString: String?) {
          guard let unwrappedString = optionalString else {
              return // Ֆունկցիայից դուրս գալ
          }
          // unwrappedString հասանելի է այստեղ
      }
      
  2. Օպցիոնալ շղթայակապ (?)՝ Թույլ է տալիս կանչել հատկություններ, մեթոդներ և ինդեքսներ օպցիոնալին: Եթե օպցիոնալը nil է շղթայի ցանկացած կետում, ամբողջ շղթան ընդհատվում է, և արդյունքը ունի nil պարունակող օպցիոնալ տիպ:

    class Person {
        var job: Job?
    }
    
    class Job {
        var salary: Double?
    }
    
    let person: Person? = Person()
    person?.job = Job()
    let salary = person?.job?.salary // salary ունի `Double?` տիպ
    
  3. Պարտադիր բացում (!)՝ Անվտանգ չհաշվարկված արժեք ստանալ:

    let requiredString: String! = "Must be present" // Անհայտ բացվող օպցիոնալ
    let unwrappedString = requiredString! // Պարտադիր բացում
    
    let dangerousOptional: String? = nil
    // let crash = dangerousOptional! // Կառուցում է սխալ
    
  4. **??`` Նուլ-կոալեսցինգ օպերատոր**՝ Առանցքային արժեք տրամադրում nil` պարունակող օպցիոնալին:

    let optionalValue: Int? = nil
    let definiteValue = optionalValue ?? 0 // definiteValue կլինի 0
    
  5. Ավտոմատ բացվող օպցիոնալներ (!)՝ Օպցիոնալներ, որոնք ավտոմատ կերպով բացվում են օգտագործման ժամանակ:

    var button: UIButton! // Կարծում ենք, որ կստեղծվի viewDidLoad-ում
    // button.setTitle("Tap me", for: .normal) // Ավտոմատ բացում օգտագործման ժամանակ
    

"Կոնտակտները" այս կոնտեքստում չեն հանդիսանում առանձին Swift լեզվական մեխանիզմ, ինչպես մյուս լեզուներում: Swift-ը ապահովում է անվտանգություն տիպային համակարգի միջոցով, ներառյալ օպցիոնալները և մուտքի վերահսկողությունը, ինչը օգնում է հստակ արտահայտել մտադրությունները և կանխել սխալները:

Օպցիոնալները ծառայում են որպես "կոնտակտ", որը ցույց է տալիս արժեքի բացակայության հնարավորությունը։