\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{peternorvigpro} \pdfinfo{ /Title (swift-4.pdf) /Creator (Cheatography) /Author (peternorvigpro) /Subject (swift 4 Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{82A395} \definecolor{LightBackground}{HTML}{F7F9F8} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{swift 4 Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{peternorvigpro} via \textcolor{DarkBackground}{\uline{cheatography.com/66685/cs/16661/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}peternorvigpro \\ \uline{cheatography.com/peternorvigpro} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 14th August, 2018.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Function}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{typealias operation = (Int, Int) -\textgreater{} (Int) \newline \newline // parameters: constant (pass by value) \newline // want to modify? \newline func modifyParams(\_ value: inout Int) \{\} \newline var value = 1 \newline modifyParams(\&value) \newline \newline // overloading external parameter names \newline func multipleOf(\_ multiplier: Int, and value: Int) \{\} \newline func multipleOf(multiplier: Int, value: Int) \{\} \newline \newline // overloading return value \newline func getValue() -\textgreater{} Int \newline func getValue() -\textgreater{} String \newline let value: Int = getValue()} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Basic types}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{// \{\{link="https://developer.apple.com/documentation/swift/range"\}\}Range\{\{/link\}\} \newline let range1 = 0...2 \newline let range2 = 0..\textless{}2 \newline \newline // \{\{link="https://developer.apple.com/documentation/swift/array"\}\}Array\{\{/link\}\} \newline let arr1: {[}Int{]} = {[}1,2,3{]} \newline let arr2: Array\textless{}Int\textgreater{} = {[}1,2,3{]} \newline \newline arr.first //=\textgreater{} Optional \newline arr{[}0{]} //=\textgreater{} value (maybe crash if wrong index) \newline \newline arr{[}0...2{]} = {[}1,2,3{]} \newline arr{[}0...2{]} = {[}1,2,3,4,5{]} // still works \newline \newline for item in arr \{\} \newline for (index, item) in arr.enumerated() \{\} \newline \newline // \{\{link="https://developer.apple.com/documentation/swift/dictionary"\}\}Dictionary\{\{/link\}\} \newline let dic {[}String: Int{]} = {[}"alpha": 1, "beta": 2{]} \newline let dic Dictionary\textless{}String, Int\textgreater{} \newline \newline dic{[}"unknow"{]} //=\textgreater{} nil \newline \newline for (key, value) in dic \{\} \newline for key in dic.keys \{\} \newline \newline // \{\{link="https://developer.apple.com/documentation/swift/set"\}\}Set\{\{/link\}\} \newline let set: Set\textless{}Int\textgreater{} = {[}1,2,3{]} \newline \newline // \{\{link="http://goshdarnclosuresyntax.com/"\}\}Closure\{\{/link\}\} \newline var addClosure: (Int, Int) -\textgreater{} Int \newline // long form \newline addClosure = \{ (a: Int, b: Int) -\textgreater{} Int in \newline return a + b \newline \} \newline // short form use type inference \newline addClosure = \{ (a, b) in \newline return a + b \newline \} \newline // even shorter \$0 = a, \$1 = b \newline addClosure = \{ \newline return \$0 + \$1 \newline \} \newline // shortest - omit "return" if immediately return \newline addClosure = \{ \newline \$0 + \$1 \newline \} \newline \newline // when closure is the last parameter \newline // common syntax \newline arr.filter \{ item -\textgreater{} Bool in \newline return !!item \newline \} \newline var stock = {[}1.5: 5, 2.5: 10{]} \newline let sum = stock.reduce(0) \{ result, pair -\textgreater{} Double in \newline return result + (pair.key * Double(pair.value)) \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Optional}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{// either value or nil \newline var optional: String? \newline \newline // some func return optional \newline var parseInt = Int("1") // 1 \newline var parseInt = Int("something ugly") // nil \newline \newline // maybe surprise \newline var optInt: Int? = 10 \newline print(optInt) // Optional(10) \newline optInt + 1 // error. Must be unwrapped \newline \newline // Avoid \newline // unwrapped with ! \newline var unwrappedOptInt = optInt! // 1 or crash if optInt == nil \newline \newline // Use this \newline // optional binding \newline if let unwrappedOptInt = optInt \{\} else \{\} \newline \newline // can shadow like this (temporary access) \newline if let optInt = optInt \{\} else \{\} \newline \newline // multiple unwrap \newline if let optInt = optInt, let optStr = optStr \{\} \newline \newline // (better) use guard \newline // also better for optimization \textless{}- don't know why. find out later \newline let optFunc: () -\textgreater{} Int? \newline func takeMeIn() \{ \newline guard let optFunc = optFunc() else \{ \newline // when optFunc is nil \newline return // guard must be returned or throw \newline \} \newline // when optFunc is Int \newline \} \newline \newline // Nil Coalescing \newline let result = optInt ?? 0} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}