Swift Cheat Sheet

swift的一些速查表,转载过来的,但是粘贴代码的时候换行都出问题了,这个该怎么解决?

不喜欢格式的可以看原文:http://codeinswift.com/swift-cheat-sheet/

Basics

println("Hello, world") 
var myVariable = 42 // variable (can‘t be nil) 
let π = 3.1415926 // constant 
let (x, y) = (10, 20) // x = 10, y = 20 
let explicitDouble: Double = 1_000.000_1 // 1,000.0001 
let label = "some text " + String(myVariable) // Casting 
let piText = "Pi = \(π)" // String interpolation 
var optionalString: String? = "optional" // Can be nil 
optionalString = nil 

/* Did you know /* you can nest multiline comments */ ? */

Arrays

// Array var shoppingList = ["catfish", "water", "lemons"]
shoppingList[1] = "bottle of water" // update shoppingList.count // size of array (3) shoppingList.append("eggs")
shoppingList += "Milk" // Array slicing var fibList = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 5]
fibList[4..6] // [3, 5]. Note: the end range value is exclusive fibList[0..fibList.endIndex] // all except last item // Subscripting returns the Slice type, instead of the Array type. // You may need to cast it to Array in order to satisfy the type checker Array(fibList[0..4]) // Variants of creating an array. All three are equivalent. var emptyArray1 = String[]() var emptyArray2: String[] = [] var emptyArray3: String[] = String[]()

Dictionaries

// Dictionary var occupations = [ "Malcolm": "Captain", "kaylee": "Mechanic" ]
occupations["Jayne"] = "Public Relations" 
var emptyDictionary = Dictionary<String, Float>()

Control Flow

// for loop (array) let myArray = [1, 1, 2, 3, 5] for value in myArray { if value == 1 {
println("One!")
} else {
println("Not one!")
}
} // for loop (dictionary) var dict = [ "name": "Steve Jobs", "title": "CEO", "company": "Apple" ] for (key, value) in dict {
println("\(key): \(value)")
} // for loop (range) for i in -1...1 { // [-1, 0, 1] println(i)
} // use .. to exclude the last number // for loop (ignoring the current value of the range on each iteration of the loop) for _ in 1...3 { // Do something three times. } // while loop var i = 1 while i < 1000 {
i *= 2 } // do-while loop do {
println("hello")
} while 1 == 2 // Switch let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some raisins and make ants on a log." case "cucumber", "watercress": let vegetableComment = "That would make a good tea sandwich." case let x where x.hasSuffix("pepper"): let vegetableComment = "Is it a spicy \(x)?" default: // required (in order to cover all possible input) let vegetableComment = "Everything tastes good in soup." } // Switch to validate plist content let city:Dictionary<String, AnyObject> = [ "name" : "Qingdao", "population" : 2_721_000, "abbr" : "QD" ] switch (city["name"], city["population"], city["abbr"]) { case (.Some(let cityName as NSString),
.Some(let pop as NSNumber),
.Some(let abbr as NSString))
where abbr.length == 2:
println("City Name: \(cityName) | Abbr.:\(abbr) Population: \(pop)") default:
println("Not a valid city")
}

Functions

Functions are a first-class type, meaning they can be nested in functions and can be passed around

// Function that returns a String func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." }
greet("Bob", "Tuesday") // call the greet function // Function that returns multiple items in a tuple func getGasPrices() -> (Double, Double, Double) { return (3.59, 3.69, 3.79)
} // Function that takes variable number of arguments, collecting them into an array func setup(numbers: Int...) { // do something }
setup(5, 16, 38) // call the setup function with array of inputs // Nested functions can organize code that is long or complex func printWelcomeMessage() -> String { var y = "Hello," func add() {
y += " world" }
add() return y
}
printWelcomeMessage() // Hello world // Passing and returning functions func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int { return 1 + number
} return addOne
} var increment = makeIncrementer()
increment(7)

Closures

Functions are special case closures ({})

// Closure example. // `->` separates the arguments and return type // `in` separates the closure header from the closure body var numbers = [1, 2, 3, 4, 5]
numbers.map({
(number: Int) -> Int in let result = 3 * number return result
}) // When the type is known, like above, we can do this numbers = [1, 2, 6]
numbers = numbers.map({ number in 3 * number })
println(numbers) // [3, 6, 18] // When a closure is the last argument, you can place it after the ) // When a closure is the only argument, you can omit the () entirely // You can also refer to closure arguments by position ($0, $1, ...) rather than name numbers = [2, 5, 1]
numbers.map { 3 * $0 } // [6, 15, 3]

Classes

All methods and properties of a class are public. If you just need to store data in a structured object, you should use a struct

“`js // A parent class of Square class Shape { init() { }

func getArea() -> Int {
return 0;
}

}

// A simple class Square extends Shape class Square: Shape { var sideLength: Int

// Custom getter and setter property
var perimeter: Int {
get {
return 4 * sideLength
}
set {
sideLength = newValue / 4
}
}
init(sideLength: Int) {
self.sideLength = sideLength
super.init()
}
func shrink() {
if sideLength > 0 {
--sideLength
}
}
override func getArea() -> Int {
return sideLength * sideLength
}

} var mySquare = Square(sideLength: 5) print(mySquare.getArea()) // 25 mySquare.shrink() print(mySquare.sideLength) // 4

// Access the Square class object, // equivalent to [Square class] in Objective-C. Square.self

//example for ‘willSet’ and ‘didSet’ class StepCounter { var totalSteps: Int = 0 { willSet(newTotalSteps) { println(“About to set totalSteps to (newTotalSteps)”) } didSet { if totalSteps > oldValue { println(“Added (totalSteps – oldValue) steps to ‘totalSteps‘”) } } } } var stepCounter = StepCounter() stepCounter.totalSteps = 100 // About to set totalSteps to 100 \n Added 100 steps to ‘totalSteps’ stepCounter.totalSteps = 145 // About to set totalSteps to 145 \n Added 45 steps to ‘totalSteps’

// If you don’t need a custom getter and setter, but still want to run code // before an after getting or setting a property, you can use willSet and didSet

Enums

Enums can optionally be of a specific type or on their own. They can contain methods like classes.

enum Suit { case Spades, Hearts, Diamonds, Clubs
func getIcon() -> String { switch self { case .Spades: return "?" case .Hearts: return "?" case .Diamonds: return "?" case .Clubs: return "?" }
}
}

Protocols

A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality.

protocol SomeProtocol { // protocol definition goes here }

Extensions

Add extra functionality to an already created type

// adds the methods first and rest to the array type extension Array {
func first () -> Any? { return self[0]
}
func rest () -> Array { if self.count >= 1 { return Array(self[1..self.endIndex])
} else { return []
}
}
}

Operator Overloading

You can overwrite existing operators or define new operators for existing or custom types.

// Overwrite existing types @infix func + (a: Int, b: Int) -> Int { return a - b
} var x = 5 + 4 // x is 1

You can’t overwrite the = operator

Add operators for new types

struct Vector2D { var x = 0.0, y = 0.0 }
@infix func + (left: Vector2D, right: Vector2D) -> Vector2D { return Vector2D(x: left.x + right.x, y: left.y + right.y)
}

Operators can be prefix, infix, or postfix.

You have to add @assignment if you wish to define compound assignment operators like +=, ++ or -=

@assignment func += (inout left: Vector2D, right: Vector2D) {
left = left + right
}

Operator overloading is limited to the following symbols: / = – + * % < > ! & | ^ . ~

Generics

Generic code enables you to write flexible, reusable functions and types that can work with any type.

// Generic function, which swaps two any values. func swapTwoValues<T>(inout a: T, inout b: T) { let temporaryA = a
a = b
b = temporaryA
}
// Generic collection type called `Stack`. struct Stack<T> { var elements = T[]()
mutating func push(element: T) {
elements.append(element)
}
mutating func pop() -> T { return elements.removeLast()
}
}

We can use certain type constraints on the types with generic functions and generic types. Use whereafter the type name to specify a list of requirements.

// Generic function, which checks that the sequence contains a specified value. func containsValue<
T where T: Sequence, T.GeneratorType.Element: Equatable>
(sequence: T, valueToFind: T.GeneratorType.Element) -> Bool { for value in sequence { if value == valueToFind { return true }
} return false }

In the simple cases, you can omit where and simply write the protocol or class name after a colon. Writing <T: Sequence> is the same as writing <T where T: Sequence>.

Emoji/Unicode support

You can use any unicode character (including emoji) as variable names or in Strings.


Which, in Xcode looks like

时间: 2024-08-05 19:31:01

Swift Cheat Sheet的相关文章

[转]Swift Cheat Sheet

原文:http://kpbp.github.io/swiftcheatsheet/ A quick cheat sheet and reference guide for Apple's Swift language. This guide intends to cover all the key features of Swift, including Strings, Arrays, Dictionaries and Flow Control. Swift is a new programm

MySQL SQL Injection Cheat Sheet

MySQL SQL Injection Cheat Sheet Some useful syntax reminders for SQL Injection into MySQL databases- This post is part of a series of SQL Injection Cheat Sheets.  In this series, I've endevoured to tabulate the data to make it easier to read and to u

XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet 介绍 本文描述了一种恰当地使用输出转码或者转义(encoding or escaping)防御XSS攻击的简单积极模式. 尽管存在巨量XSS攻击方式,遵守一些简单的规则能够彻底防住这类严重的攻击. 本文不探讨XSS攻击的商业和技术影响. reflected and stored XSS 可以

转:PostgreSQL Cheat Sheet

PostgreSQL Cheat Sheet CREATE DATABASE CREATE DATABASE dbName; CREATE TABLE (with auto numbering integer id) CREATE TABLE tableName ( id serial PRIMARY KEY, name varchar(50) UNIQUE NOT NULL, dateCreated timestamp DEFAULT current_timestamp ); Add a pr

A printf format reference page (cheat sheet)

Summary: This page is a printf formatting cheat sheet. I originally created this cheat sheet for my own purposes, and then thought I would share it here. A cool thing about the printf formatting syntax is that the specifiers you can use are very simi

The iOS Design Cheat Sheet 界面设计速参

http://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/ With the release of iOS 7, app designers and developers will need to adjust their visual language to match the new "flat" design of iOS. In addition to the grid system, the dimensions of

Windows平台Atom编辑器的常用快捷键小抄Cheat Sheet

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Windows平台Atom编辑器的常用快捷键小抄Cheat Sheet. Windows平台Atom编辑器的常用快捷键小抄Cheat Sheet

A Cheat Sheet for HTTP Libraries in C++

Unfortunately, standard C++ library provides no tools for working with HTTP protocol. Therefore, when we want to run some REST service, parse a webpage or write a simple bot or web crawler, we always wonder which library is better and faster in use.

IOS Application Security Testing Cheat Sheet

IOS Application Security Testing Cheat Sheet [hide] 1 DRAFT CHEAT SHEET - WORK IN PROGRESS 2 Introduction 3 Information gathering 4 Application traffic analysis 5 Runtime analysis 6 Insecure data storage 7 Tools 8 Related Articles 9 Authors and Prima