Sobes.tech
Middle+

Mis on sild Toll-free ja Swift vahel?

sobes.tech AI

Vastus AI-lt

Toll-free ja Swift vahel on sild — see on mehhanism, mis võimaldab kasutada mõningaid Foundation tüüpe (Objective-C-st), mis on "Toll-free bridged" nende analoogidega Core Foundationis (C-st), otse Swiftis ja vastupidi, ilma et oleks vaja luua uusi objekte või teha konverteerimist. See tagab Swift ja vanemate Objective-C/C raamistikute vahelise koostalitlusvõime, millest paljud kasutavad Core Foundationi.

Toll-free bridging tähendab, et saate vabalt edastada ühe tüübi eksemplare sinna, kus oodatakse teise tüübi eksemplari, ja vastupidi, ilma uue objekti loomise kuludeta. Swift kontekstis kehtib see teatud Foundation tüüpidele, nagu NSString, NSArray, NSDictionary, NSDate, mida saab kasutada nende analoogidena Swiftis: String, Array, Dictionary, Date.

Toll-free bridged tüübi näited:

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

Swift "automaatselt" teostab selle silla Objective-C API-dega suhtlemisel, muutes koodi puhtamaks ja mugavamaks.

import Foundation // Hõlmab Foundationi ja võimaldab kasutada NS-tüüpe

let nsString: NSString = "Tervitused Swiftist" // NSString objekt
let swiftString: String = nsString as String // NSString automaatselt muudetakse Stringiks

let swiftArray: [Int] = [1, 2, 3] // Swift'i massiiv
let nsArray: NSArray = swiftArray as NSArray // Swift'i massiiv automaatselt muudetakse NSArray-ks

// Näide NSStringi kasutamisest funktsioonis, mis ootab Stringi (ja vastupidi)
func printString(_ str: String) {
    print(str)
}

printString(nsString as String) // Edastame NSStringi, mis ootab Stringi

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

printNSString(swiftString as NSString) // Edastame Stringi, mis ootab NSStringi

Toll-free ja Swift vahelise silla loomine on osa Apple'i üldisest strateegiast, mis tagab Swift ja legacy Objective-C/C koodi vahelise ühilduvuse. See lihtsustab oluliselt Swift'i uue koodi migratsiooni ja integreerimist olemasolevatesse projektidesse.