Š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<=>StringCFArrayRef<=>NSArray<=>ArrayCFDictionaryRef<=>NSDictionary<=>DictionaryCFDateRef<=>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.