2015-12-15 13 views
6

Sto provando a portare alcune app di base da OS X a Linux ma sembra che sulla piattaforma Linux manchino ancora cose di base. C'è qualche documentazione cosa manca ?? Ecco esempio:Differenze tra Swift 2 e Linux/OS X

exmcast.swift:7:20: error: value of type 'String' has no member 'stringByReplacingOccurrencesOfString' 
let name: String = address.stringByReplacingOccurrencesOfString(".", withString: "_") 

Questo semplice codice funziona su OS X. Su Linux - a vedere i risultati. È molto difficile eseguire il porting di qualsiasi cosa quando non ci sono informazioni di base che mancano. e sembra che anche le cose di base che manca ..

risposta

5

Swift 3 sarà rilasciato in autunno 2016.

La Swift ha recentemente open-source e il porto di Linux sono work in progress:

Il porto è ancora un work in progress ma siamo felici di dire che oggi è utilizzabile per la sperimentazione.

Si può andare a Swift.org e github.com/apple e godere del fantastico lavoro.

Quando trovi qualcosa non ancora implementato, puoi presentare un bug e/o aiutare a implementare la funzione.

Nuove versioni di open source Swift verranno pubblicate regolarmente su Swift.org.

3

Il metodo che si sta tentando di chiamare è in realtà parte di NSString. La stringa è superata dietro le quinte di NSString ed è per questo che è possibile utilizzare tale metodo su OS X. NSString fa parte del framework Foundation e Foundation non è completamente implementato per Linux. Puoi controllare lo stato delle varie parti della Fondazione qui: Foundation Status. NSString è attualmente solo parzialmente implementato.

+0

Non conoscevo questo file di stato. Fantastico, grazie! – Moritz

+0

Nessun problema! Così tanti nuovi gadget Swift, è difficile tenerne traccia. –

+0

Grazie. Quindi è richiesta pazienza :) Problema risolto. – MrSpock

0

su OSX è ancora necessario importare Fondazione

Siete liberi di usare la soluzione Swift pura, nel tuo caso

let str = "alfa.beta" 
// (1) 
    let str1 = str.characters.map { 
     $0 == "." ? "_": $0 
    }.reduce("") { (str, c) -> String in 
     str + String(c) 
    } 
// (2) 
    let str2 = String(str.characters.split(".").joinWithSeparator(["_"])) 
    print(str,str1,str2) // alfa.beta alfa_beta alfa_beta 

per qualcosa di più avanzato, si hanno le funzioni potenti

mutating func replaceRange<C : CollectionType where C.Generator.Element == Character>(subRange: Range<Index>, with newElements: C) 

o

mutating func replaceRange(subRange: Range<Index>, with newElements: String)