Apple a creat o limbă nouă pentru a suplimenta Obiectiv-C: Rapid. Rapid este încă în clasa de limbi C, dar are anumite caracteristici ale unui limbaj interpretat. Sintaxa mai simplă în comparație cu Obiectiv-C va face învățarea și utilizarea cu ușurință. Rapid este utilizabil ca interpret sau compilator.
Introduc această limbă arătând cum să o folosiți cu Alfred Workflows și presupun că deja sunteți familiarizat cu scrierea fluxurilor de lucru în Alfred. Dacă nu, vă rugăm să consultați aceste tutoriale: Alfred pentru incepatori, Intermediarii, Avansat, și Alfred Debugging.
Acest tutorial se concentrează pe utilizarea Rapid cu Alfred și nu o referință lingvistică completă. Există o mare serie de tutorial despre învățare Rapid în Coduri Tut+, O introducere în Swift: Partea 1 și O introducere în Swift: Partea 2. Voi presupune că ați citit deja aceste articole.
A instala Rapid pe un Mac, trebuie să instalați XCode din App Store. După instalare, trebuie să deschideți o fereastră de terminal și să rulați:
xcode-select -s /Applications/Xcode.app/ - instalare
Aceasta va face ca toate instrumentele XCode să fie disponibile pentru linia de comandă.
Puteți compila și experimenta cu Rapid în XCode 6.1 si este Loc de joaca. Acest tutorial se concentrează pe utilizarea Rapid pe linia de comandă folosind doar editorul unui programator și linia de comandă.
Presupunând că ai instalat XCode 6.1 la Aplicații dosar, va trebui să adăugați Rapiddirectorul executabil al căii. Pentru bash, adăugați acest lucru la dvs. ~ / .Bashrc fişier:
export PATH = "$ PATH: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin"
Pentru zsh, adăugați aceeași linie la dvs. ~ / .Zshrc fişier. Pentru Peşte shell, adăugați această linie:
set-xg PATH "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin" $ PATH
Am constatat că folosind xcrun fără a avea setarea PATH ca mai sus, nu funcționează întotdeauna.
A compila Rapid fișiere din linia de comandă, tastați:
swiftc
A alerga Rapid într-un interpret interactiv, tastați:
rapid
adăugare Rapid Suport pentru Text sublim este usor. Instalați managerul de pachete pentru textul sublim. Odată ce aveți Manager de pachete, trebuie să instalați pachetul Rapid prin utilizarea Shift-Command-P, tip instalare pachet, introduce, și Rapid. Acest lucru ar trebui să instalați Rapid pachet.
Pe Emacs, managerul de pachete pentru Emacs este cea mai bună rută, dar este doar în Emacs 24+. Pentru Emacs 24+, trebuie să descărcați și să instalați Aquamacs. Emacs instalat pe un Mac standard este versiunea 22. Pentru a instala Aquamacs utilizând homebrew și HomeBrew Cask, tastați-l într-un terminal:
butelii instalați aquamacs
Odată instalat, trebuie să adăugați acest lucru la dvs. ~ / .Emacs fişier:
(necesită pachet) (package-initialize) (adăugați-la-listă "pachete-arhive" ("melpa". http://melpa.milkbox.net/packages/)
Alerga Aquamacs și deschideți Emacs Manager de pachete cu Meta-x package-list-packages.
Emacs Manager de pacheteCauta rapid-mode și faceți clic pe el. Este posibil să aveți nevoie să instalați flycheck de asemenea.
Pentru sevă, trebuie să instalați Swift.Vim. Cel mai simplu mod de a instala Swift.Vim este de a instala maximă-minunat primul. A instala maximă-minunat, deschideți un terminal în ~ / Documente (sau orice alt director. Trebuie să fie unele în cazul în care aveți de gând să păstrați.). Introduceți următoarele:
git clone https://github.com/square/maximum-awesome.git cd maxim-minunat rake
Instalarea va dura ceva timp. Apoi, adăugați această linie la dvs. ~ / .Vimrc.bundle.local fişier:
Pluginul "Keithbsmiley / swift.vim"
După salvare, reporniți sevă și tip
: PluginInsall
Vundle, care maximă-minunat instalează, va instala orice pluginuri noi.
Vundler Instalarea Swift.VimÎn acest caz, Vundler instalează Swift.Vim conecteaza. sevă va face acum evidențierea sintaxei pentru Rapid.
Rapid poate rula ca interpret sau compilator. Pentru a ilustra acest lucru, creați un fișier hello.swift și adăugați-le la aceasta:
#! / usr / bin / env xcrun -sdk Aplicația macosx swift println ("Hello World!")
Aceasta este cea mai de bază Salut Lume program pe care oamenii îl folosesc ca prim program. Prima linie spune shell-ului pe care doriți să-l rulați folosind acest script xcrun cu linia de comandă specificată. xcrun este un program Mac OSX pentru rularea utilităților XCode din linia de comandă.
Salvați fișierul și modificați modul de execuție al acestuia
chmod x + un salut.swift
Rulați fișierul cu
./hello.swift
Și va produce Salut Lume! pe terminal, prin rularea scriptului cu Rapid ca interpret. Pentru a compila, tastați acest lucru pe terminal:
swiftc hello.swift
A Salut programul există acum în acel director. Tip
./Salut
și veți vedea aceeași ieșire exactă.
Bună Programul MondialAmbele metode au produs exact același rezultat. Singurul lucru diferit este acela al abordării interpretate, XCode 6 trebuie să fie pe fiecare sistem care o execută. Dacă compilați programul, acesta poate fi rulat pe orice Mac.
O notă interesantă despre abordarea interpretată este aceea că este aceeași cu abordarea compilată a ceea ce se întâmplă. În modul interpretat, acesta compilează programul în memorie și rulează direct în memorie. Abordarea compilată se compilează pe disc și executați programul. În general, nu economisiți timp prin interpretarea codului Swift.
Pentru a crea programe de scriere pentru utilizare în Alfred, o bibliotecă de funcții de ajutor poate fi un mare avantaj. Creați un fișier nou numit Alfred.swift și plasați acest cod în interiorul:
// // Clasa: Alfred // // Descriere: Această clasă pentru a ajuta la crearea fluxurilor de lucru pentru Alfred utilizând // limba Apple Swift. // // Variabile de clasă: // // Nume Descriere // // calea cache a directorului care conține memoria cache pentru fluxul de lucru // calea de date către directorul care conține datele pentru fluxul de lucru // bundleId ID-ul pentru pachet care reprezintă calea fluxului de lucru // pentru calea directorului fluxului de lucru // calea principală la directorul de acasă al utilizatorului // rezultatele rezultatelor acumulate. Aceasta va fi convertită în lista XML pentru feedback // în Alfred // // // Import Librăriile necesare. // import Foundation // // Definirea structurilor utilizate. / / var Var: String = "" var Var: String = "" var Titlu: String = "var Var: String = "" var Rtype: String = "" // // Clasa: Regex // // Descriere: Aceasta este o clasă helper pentru scrierea testelor folosind expresii regulate. Bazat // pe articol: http://benscheirman.com/2014/06/regex-in-swift/ // clasa Regex let internExpression: NSRegularExpression lasa modelul: init string (_ pattern: String) self.pattern = model var eroare: NSError? self.internalExpression = NSRegularExpression (model: model, opțiuni: .CaseInsensitive, eroare: & eroare)! func test (input: String) -> Bool lasa meciuri = self.internalExpression.matchesInString (intrare, optiuni: zero, interval: NSMakeRange (0, count (input) / Class: Alfred // // Descriere: Această clasă include funcțiile necesare pentru a scrie fluxuri de lucru pentru Alfred. // clasa publica Alfred var cache: String = "" var data: String = "" var bundleId: String = "" var var: String = "" var varf: NSFileManager = NSFileManager maxResults: Int = 10 var actualResult: Int = 0 var rezultate: [AlfredResult] = [] // // Clasa de bibliotecă Funcția: // // init Această funcție de clasă este apelată la utilizarea bibliotecii pentru a inițializa // orice variabile utilizate pentru bibliotecă înainte ca oricine să poată face apel la o funcție de clasă a bibliotecii. // public init () // // Crearea matricei rezultate. // var resfirst: AlfredResult = AlfredResult () resfirst.Title = "Nu s-au găsit rezultate ..." resfirst.Uid = "implicit" resfirst.Valid = "nu" resfirst.Arg = "resfirst.Sub =" "resfirst.Icon = "" resfirst.Auto = "" resfirst.Rtype = "" results.append (resfirst) maxResults = 10 currentResult = 0 // // Setați variabilele de cale și de acasă din mediul înconjurător. // în Obiectiv C: NSString * path = [[NSProcessInfo processInfo] mediu] objectForKey: @ "PATH"]; // permite procesul = NSProcessInfo.processInfo (); edict = NSDictionary (dicționar: process.environment) cale = fileMGR.currentDirectoryPath acasă = edict ["HOME"] ca! String // // Dacă fișierul info.plist există, citiți-l pentru bundleid și setați variabila bundleId. // bundleId = GetBundleId () // // Creați structura directorului pentru directoarele cache și date. // cache = home + "/Library/Caches/com.runningwithcrayons.Alfred-2/Workflow Data /" + bundleId; data = home + "/ Biblioteca / Suport pentru aplicații / Alfred 2 / Workflow Data /" + bundleId; // // A se vedea dacă există directorul de cache. // if (! fileMGR.fileExistsAtPath (cache)) // // Nu există. Creaza-l! // fileMGR.createDirectoryAtPath (cache, withIntermediateDirectories: true, atribute: nul, eroare: nil) // // A se vedea dacă există directorul de date. // if (! fileMGR.fileExistsAtPath (data)) // // Nu există. Creaza-l! // fileMGR.createDirectoryAtPath (date, withIntermediateDirectories: true, atribute: nil, error: nil) // // clasa Funcție: GetBundleId // // Descriere: Această funcție de clasă va citi fluxurile de lucru info.plist și return // bundleid // public func GetBundleId () -> String // // obțineți ID-ul pachetului din plist dacă nu a fost deja recuperat. // dacă (bundleId == "") let path = NSBundle.mainBundle () pathForResource ("info", dinType: "plist") dict = NSDictionary (contentsOfFile: path! bundleId = dict ["bundleid"] ca! String // // Returnați ID-ul pachetului. // return (bundleId) // // clasă Funcție: Cache // // Descriere: Această funcție de clasă returnează directorul cache pentru fluxul de lucru. // public func Cache () -> String return (cache) // // clasa Funcție: Data // // Descriere: Această funcție de clasă returnează directorul de date pentru fluxul de lucru. // public func Data () -> String return (data) // // clasa Functie: cale // // Descriere: Aceasta functie de clasa returneaza calea catre fluxul de lucru. // public func Calea () -> String return (path) // // class Function: Home // // Descriere: Aceasta functie de clasa returneaza directorul Home pentru utilizator. // public func Acasă () -> String return (home) // // clasă Funcție: ToXML // // Descriere: Această funcție de clasă are matricea rezultate și o transformă într-un // XML String pentru trecerea la Alfred. // public func ToXML () -> String var newxml: String = ""pentru rezultate în rezultate newxml + =" "return (newxml) // // clasa Funcție: AddResult // // Descriere: Funcția de clasă helper care face mai ușor să treci valorile // într-o funcție de clasă // și să creezi un rezultat al matricii care să fie trecut înapoi la Alfred . // // Intrări: // uid uid al rezultatului, ar trebui să fie unic // arg argumentul care va fi transmis pe // titlu Titlul elementului rezultat // sub Subtitrarea textului pentru elementul rezultat // pictograma care va fi utilizată pentru elementul rezultat // validează dacă elementul rezultat poate fi acționat // auto valoarea completă de completare pentru elementul de rezultat // rtype Nu am nicio idee despre ce se utilizează acesta.HELP! // public func AddResult (uid: String, arg: String, titlu: String, sub: String, pictogramă: String, valid: String, auto: String, rtype: String) / if (actualResult < maxResults) if(currentResult != 0) var resfirst:AlfredResult = AlfredResult() resfirst.Title = title resfirst.Uid = uid resfirst.Valid = valid resfirst.Arg = arg resfirst.Sub = sub resfirst.Icon = icon resfirst.Auto = auto resfirst.Rtype = rtype results.append(resfirst) else results[0].Title = title results[0].Uid = uid results[0].Valid = valid results[0].Arg = arg results[0].Sub = sub results[0].Icon = icon results[0].Auto = auto results[0].Rtype = rtype currentResult++ // // class Function: AddResultsSimilar // // Description: This class function will only add the results that are similar to the // input given. This is used to select input selectively from what the // user types in. // // Inputs: // inString the String to test against the titles to allow that record or not // uid the uid of the result, should be unique // arg the argument that will be passed on // title The title of the result item // sub The subtitle text for the result item // icon the icon to use for the result item // valid sets whether the result item can be actioned // auto the autocomplete value for the result item // rtype I have no idea what this one is used for. HELP! // public func AddResultsSimilar(uid: String, inString: String, arg: String, title: String, sub: String, icon: String, valid: String, auto: String, rtype: String) // // Create the test pattern. // var matchstr = inString + ".*" // // Compare the match String to the title for the Alfred output. // if(Regex(inString + ".*").test(title)) // // A match, add it to the results. // AddResult( uid, arg: arg, title: title, sub: sub, icon: icon, valid: valid, auto: auto, rtype: rtype) // // class Function: SetDefaultString // // Description: This class function sets a different default title // // Inputs: // title the title to use // public func SetDefaultString(title: String) if(currentResult == 0) // // Add only if no results have been added. // results[0].Title = title- " // // Închide xml și returnează Stringul XML // newxml + ="
\ (Result.Arg) \ (Result.Title) \ (Result.Sub)\ (Result.Icon)
Acesta este un port al bibliotecii mele de limbi străine Alfred Go pe care o folosesc în tutorialul Track Project Time With Alfred Timekeeper Rapid. Definesc o structură, AlfredResult
, pentru a păstra elementele pentru a reveni la o Filtru de scripturi în Alfred, o clasă pentru utilizarea NSRegularExpression
Obiectiv-C clasa, și Alfred clasa pentru manipularea tot ceea ce o Alfred ar fi nevoie de un flux de lucru.
În acest moment, ați observat că am menționat un Obiectiv-C clasă. Rapid nu elimină nevoia de utilizare Obiectiv-C biblioteci. Rapid biblioteca standard are construcții de bază și rutine de bază. Nimic care nu este specific sistemului de operare. Toate Obiectiv-C bibliotecile sunt utilizabile direct de la Rapid. Deci, nu-ți arunca toate Obiectiv-C manuale de referință. Sunt încă necesare.
Alfred clasa are o rutină de inițializare care obține diferitele căi de directoare pe care le-ar folosi un flux de lucru și care ar crea directoarele de date și cache dacă acestea nu există deja. Metodele AddResult ()
și AddResultsSimilar ()
creați structura de rezultate pentru ieșirile XML la Alfred. AddResultsSimilar ()
adaugă doar rezultatul dacă era similar cu linia de titlu. ToXML ()
ieșire funcția XML a matricei rezultate.
Exemplul fluxului de lucru va fi un convertor de caz. Am creat-o o dată în PHP, dar pentru multe sisteme rulează într-adevăr lent. Va lua un șir pe Alfred prompt sau din selecția OSX utilizând o tastă rapidă și dați o listă cu conversiile disponibile. Afișează conversia rezultată pe măsură ce tastați. Conversia pe care utilizatorul o selectează este cea trimisă în clipboard și aplicația de sus.
Alfred Case Converter WorkflowCreați un flux de lucru Alfred așa cum vedeți mai sus.
Filtrul Script al fluxului de lucruSeteaza ScriptFilter după cum vedeți mai sus. Selectează Deschideți dosarul fluxului de lucru în colțul din dreapta jos. A căutător fereastra se va deschide în directorul fluxului de lucru. Copiați Biblioteca Alfred fișier creat mai devreme în acest director. Apoi creați un nou fișier numit tcconverter.swift și adăugați acest cod în partea de jos a fișierului:
// // Program: Text Converter Case (tcconverter) // // Descriere: Acest program va lua un șir pe linia de comandă, va converti // în mai multe moduri și va crea o ieșire xml pentru a afișa // într-un Alfred Script Filtru. // // // Importul de biblioteci: // import Alfred import Fundația de clasă de fond init () // // Creați obiectul Alfred. // var wf = Alfred () // // Obțineți șirul de linie de comandă și inițializați contorul. // permite str: String = Process.arguments [1] var count = 0 // // Într-o String Capitalizat. // var rezultat = str.capitalizedString wf.AddResult ("CS \ (count)", arg: rezultat, titlu: "Capitalizat: \ (rezultat)", sub: , valide: "da", auto: "", rtype: "") count ++ // // Crearea unui string String. // result = str.lowercaseString wf.AddResult ("CS \ (count)", arg: rezultat, titlu: "Smallcase: \ (result)", sub: valide: "da", auto: "", rtype: "") count ++ // // Crearea unui string String. // result = str.uppercaseString wf.AddResult ("CS \ (count)", arg: rezultat, titlu: "Uppercase: \ (rezultat)", sub: valid: "da", auto: "", rtype: "") numără ++ // // Creați un string String. // rezultat = TitluCase (str) wf.AddResult ("CS \ (count)", arg: rezultat, titlu: "Titlecase: \ (result)", sub: , valid: "da", auto: "", rtype: "") count ++ // // Ieșiți XML. // println (wf.ToXML ()) // // Metoda: TitleCase // // Descriere: Această metodă convertește șirul dat Casei de titlu. // // Input: // str Șirul de conversie. // func TitleCase (str: String) -> String // // Creați un șir de cuvinte pentru litere mici. // să fie mai mică = ["la", "an", "și", "la", "ca", "dar", "sau", "este", "cu", "a", ",", "de", "vs", "vs", "via", "via", "en" o serie de cuvinte care urmează să fie învelite în partea superioară. // permiteți elevului = "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X" "CSS", "AT & T", "PHP"] // // Împărțiți șirul după spații. // var words = str.componentsSeparatedByString ("") // // inițializați variabilele helper. // var result = "" var first = true // // Faceți buclă prin fiecare cuvânt. // pentru cuvinte în cuvinte // // Creați un litere mici ale cuvântului și cuvântul rezultat ca capitalizat. // var lword = word.lowercaseString var res = word.capitalizedString // // Curățați prin fiecare cuvânt care ar trebui să fie litere mici. // for low in lower if lword == low.lowercaseString // // Ar trebui să fie litere mici. Setați cuvântul rezultat cu acesta și rupeți // din bucla. // res = low break // // Curățați fiecare cuvânt care ar trebui să fie superior. // pentru sus în if lword == up.lowercaseString // // Ar trebui să fie majusculă. Setați cuvântul rezultat și ieșiți. // res = up break // // Dacă este primul cuvânt, atunci întotdeauna capitalizați. // dacă primul res = res.capitalizedString first = false // // Creați șirul rezultat. // result + = "\ (res)" // // Retur rezultatul. // return (rezultat) cv: Convertor = Convertor ()
Acest cod definește convertizor
obiect. Acest obiect creează diferite versiuni ale șirului și le atribuie listei de rezultate XML. Odată complet construit, acesta trimite XML la ieșire.
convertizor
obiect are TitleCase ()
pentru crearea unei versiuni de case de titlu a șirului. Compară fiecare cuvânt din șir cu matricea cu majuscule și matricea cu majuscule. Dacă se găsește în acestea, se stabilește cuvântul la acea valoare. Se asigură întotdeauna că primul cuvânt este capitalizat.
Compilarea unei biblioteci la o aplicație este puțin complexă. În programul Terminal.app sau iTerm.app, executați aceste linii de comandă în directorul care conține sursele.
Odată ce toți cei patru pași sunt executați, veți avea programul tcconverter în acel director. Dacă modificați codul tcconverter.swift, trebuie doar să reluați ultima comandă. Dacă schimbați codul Alfred.swift, va trebui să reluați toate cele patru rânduri.
Programul tcconverter ar trebui să fie acum în directorul fluxului de lucru. Puteți să o testați în Alfred prompt:
Testarea coduluiFișierul de descărcare are toate aceste fișiere și fluxul de lucru pentru dvs. pentru a examina.
În acest tutorial v-am arătat cum să instalați Rapid pe Mac, configurați trei editori de programe diferite și coajă, rulați Rapid programe într-un terminal și utilizarea Rapid a construi Fluxurile de lucru Alfred.
Aceasta este o mulțime de cunoștințe pe care trebuie să o practicați să vă amintiți. Prin urmare, du-te face unele minunate Fluxurile de lucru Alfred în Rapid și împărtășiți-le cu toată lumea!