Sobes.tech
Middle+

Šta je most između Toll-free i Swift?

sobes.tech АИ

Одговор од АИ

Most između Toll-free i Swift je mehanizam koji omogućava korišćenje određenih tipova Foundation (iz Objective-C), koji su "Toll-free bridged" sa njihovim analogima u Core Foundation (iz C), direktno u Swift, i obrnuto, bez eksplicitnog kreiranja novih objekata ili konverzije. Ovo obezbeđuje interoperabilnost između Swift i starih framework-a na Objective-C/C, od kojih mnogi koriste Core Foundation.

Toll-free bridging znači da možete slobodno prenositi instance jednog tipa tamo gde se očekuje instanca drugog tipa, i obrnuto, bez dodatnih troškova za kreiranje novog objekta. U kontekstu Swift, ovo se odnosi na neke tipove Foundation, kao što su NSString, NSArray, NSDictionary, NSDate, koji se mogu koristiti kao njihovi odgovarajući u Swift-u: String, Array, Dictionary, Date.

Primeri Toll-free bridged tipova:

  • CFStringRef <=> NSString <=> String
  • CFArrayRef <=> NSArray <=> Array
  • CFDictionaryRef <=> NSDictionary <=> Dictionary
  • CFDateRef <=> NSDate <=> Date

Swift "automatski" vrši ovaj most pri interakciji sa API-jem napisanom u Objective-C, što čini kod čistijim i pogodnijim.

import Foundation // Uključuje Foundation i omogućava korišćenje NS tipova

let nsString: NSString = "Zdravo iz Swift" // Objеkt NSString
let swiftString: String = nsString as String // NSString automatski konvertuje u String

let swiftArray: [Int] = [1, 2, 3] // Swift niz
let nsArray: NSArray = swiftArray as NSArray // Swift niz automatski konvertuje u NSArray

// Primer korišćenja NSString u funkciji koja očekuje String (i obrnuto)
func printString(_ str: String) {
    print(str)
}

printString(nsString as String) // Prosleđujemo NSString, očekuje se String

func printNSString(_ nsStr: NSString) {
    print(nsStr)
}

printNSString(swiftString as NSString) // Prosleđujemo String, očekuje se NSString

Most između Toll-free i Swift je deo opšte strategije Apple-a za obezbeđivanje kompatibilnosti između Swift i legacy koda na Objective-C i C. On značajno olakšava migraciju i integraciju novog Swift koda u postojeće projekte.