Title: swift基础.md · Issue #1 · aliencode/aliencode.github.io · GitHub
Open Graph Title: swift基础.md · Issue #1 · aliencode/aliencode.github.io
X Title: swift基础.md · Issue #1 · aliencode/aliencode.github.io
Description: 检查类型 用类型检查操作符(is)来检查一个实例是否属于特定子类型,返回 true 或 false 。 申明变量 var aaa = 1 //很长的数值可以用 _ 来分隔,如 111_222.1 = 111222.1 根据值判断变量类型 字符输出 println( "hello \(aaa) !" ); aaa 将被值替换. 字符串合并 var b = "aaa:" + String(a) 数组 var shoppingList = ["catfish", "water...
Open Graph Description: 检查类型 用类型检查操作符(is)来检查一个实例是否属于特定子类型,返回 true 或 false 。 申明变量 var aaa = 1 //很长的数值可以用 _ 来分隔,如 111_222.1 = 111222.1 根据值判断变量类型 字符输出 println( "hello \(aaa) !" ); aaa 将被值替换. 字符串合并 var b = "aaa:" + String(a) ...
X Description: 检查类型 用类型检查操作符(is)来检查一个实例是否属于特定子类型,返回 true 或 false 。 申明变量 var aaa = 1 //很长的数值可以用 _ 来分隔,如 111_222.1 = 111222.1 根据值判断变量类型 字符输出 println( "hello \(aaa) !" ); aaa 将被值替换. 字符串合并 var b = "aaa...
Opengraph URL: https://github.com/aliencode/aliencode.github.io/issues/1
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"swift基础.md","articleBody":"## 检查类型\n\n用类型检查操作符(is)来检查一个实例是否属于特定子类型,返回 true 或 false 。\n## 申明变量\n\n``` swift\nvar aaa = 1 //很长的数值可以用 _ 来分隔,如 111_222.1 = 111222.1\n```\n\n根据值判断变量类型\n## 字符输出\n\n``` swift\nprintln( \"hello \\(aaa) !\" );\n```\n\n`aaa` 将被值替换.\n## 字符串合并\n\n``` swift\nvar b = \"aaa:\" + String(a)\n```\n## 数组\n\n``` swift\nvar shoppingList = [\"catfish\", \"water\", \"tulips\", \"blue paint\"]\n\n\n//key/value 形式\n\nvar occupations = [\n \"Malcolm\": \"Captain\",\n \"Kaylee\": \"Mechanic\",\n]\n\noccupations[\"Jayne\"] = \"Public Relations\"\n```\n### 申明空数组\n\n``` swift\nlet emptyArray = [String]() //赋值 emptyArray.append(\"1\")\nlet anyArray = [Any]() //表示任意数据类型的数组\nlet emptyDictionary = [String: Float]() //赋值 emptyDictionary[\"a\"] = 1.0\n```\n\n用switch来判断读取anyArray数据\n\n``` swift\nfor thing in things {\n switch thing {\n case 0 as Int:\n println(\"zero as an Int\")\n case 0 as Double:\n println(\"zero as a Double\")\n case let someInt as Int:\n println(\"an integer value of \\(someInt)\")\n case let someDouble as Double where someDouble \u003e 0:\n println(\"a positive double value of \\(someDouble)\")\n case is Double:\n println(\"some other double value that I don't want to print\")\n case let someString as String:\n println(\"a string value of \\\"\\(someString)\\\"\")\n case let (x, y) as (Double, Double):\n println(\"an (x, y) point at \\(x), \\(y)\")\n case let movie as Movie:\n println(\"a movie called '\\(movie.name)', dir. \\(movie.director)\")\n default:\n println(\"something else\")\n }\n}\n```\n## for-in使用\n\n``` swift\nlet individualScores = [75, 43, 103, 87, 12]\nvar teamScore = 0\nfor score in individualScores {\n if score \u003e 50 {\n teamScore += 3\n } else {\n teamScore += 1\n }\n}\n```\n### key/value形式遍历\n\n``` swift\nlet interestingNumbers = [\n \"Prime\": [2, 3, 5, 7, 11, 13],\n \"Fibonacci\": [1, 1, 2, 3, 5, 8],\n \"Square\": [1, 4, 9, 16, 25],\n]\nvar largest = 0\nfor (kind, numbers) in interestingNumbers {\n for number in numbers {\n if number \u003e largest {\n largest = number\n }\n }\n}\n```\n## if-else使用\n\n``` swift\nvar optionalString = \"World\" \n\nvar optionalName: String? = \"John Appleseed\" //申明变量为的值为可选的,不然 optionalName = nil 会报错\noptionalName = nil\n\nvar greeting = \"Hello!\"\n\nif let name = optionalName { //如果 optionalName 不为 nil 则name将被赋值,不然跳过下面的代码块到else代码块。\n greeting = \"Hello, \\(name)\"\n}else\n{\n greeting = \"Hello, \\(optionalString)\"\n}\n\n```\n## switch使用\n\n``` swift\nvar vegetableComment=\"\"\n\nlet vegetable = \"red pepper\"\nswitch vegetable {\ncase \"celery\":\n vegetableComment = \"Add some raisins and make ants on a log.\"\ncase \"cucumber\", \"watercress\":\n vegetableComment = \"That would make a good tea sandwich.\"\ncase let x where x.hasSuffix(\"pepper\"): \n vegetableComment = \"Is it a spicy \\(x)?\"\ndefault:\n vegetableComment = \"Everything tastes good in soup.\"\n}\n\nprintln(vegetableComment)\n```\n## do,while使用\n\n``` swift\nvar n = 2\n\n//条件在开始\nwhile n \u003c 100 { \n n = n * 2\n}\n\n//条件在结尾\ndo {\n m = m * 2\n} while m \u003c 100\n\n\n\n//范围\nvar firstForLoop = 0\nfor i in 0..\u003c4 { //等同于:for var i = 0; i \u003c 4; ++i \n firstForLoop += i\n}\n\n```\n#0..\u003c4 不包括4,如果要包括4,使用 0...4\n## 函数和闭包\n\n``` swift\n\n//函数申明\n\nfunc greet函数名(name: String, day: String)函数参数 -\u003e返回值 String {\n return \"Hello \\(name), today is \\(day).\"\n}\ngreet(\"Bob\", \"Tuesday\")\n\nfunc sumOf(numbers: Int...)参数个数不固定 -\u003e Int {\n var sum = 0\n for number in numbers {\n sum += number\n }\n return sum\n}\nsumOf()\nsumOf(42, 597, 12)\n\n\n//返回一个元组\nfunc calculateStatistics(scores: [Int]) -\u003e (min2: Int, max2: Int, sum2: Int) {\n var min = scores[0]\n var max = scores[0]\n var sum = 0\n\n for score in scores {\n if score \u003e max {\n max = score\n } else if score \u003c min {\n min = score\n }\n sum += score\n }\n\n return (min, max, sum)\n}\nlet statistics = calculateStatistics([5, 3, 100, 3, 9])\n\nprintln(statistics)\nprintln(statistics.sum2) //使用返回元组的名称来取值\nprintln(statistics.1) //索引来取值\n\n//输出结果:\n//(3, 100, 120)\n//120\n//100\n\n\n\n//函数做为返回值,以及函数嵌套\nfunc makeIncrementer() -\u003e (String -\u003e Int) { //(String -\u003e Int) 与返回函数的参数数据类型和返回值相同\n func addOne(number: String) -\u003e Int {\n var a:Int? = number.toInt()\n if let b = a\n {\n return 1+b\n }\n else {return 1}\n }\n return addOne\n}\nvar increment = makeIncrementer() //调用了makeIncrementer函数,返回addOne函数\nprintln(increment(\"7\")) //return 8\n\n\n//函数当做参数传入另一个函数\nfunc hasAnyMatches(list: [Int], condition: Int -\u003e Bool) -\u003e Bool { //condition: Int -\u003e Bool 参数函数的值和返回值定义\n for item in list {\n if condition(item) {\n return true\n }\n }\n return false\n}\nfunc lessThanTen(number: Int) -\u003e Bool {\n return number \u003c 10\n}\nvar numbers = [20, 19, 7, 12]\nhasAnyMatches(numbers, lessThanTen)\n\n//使用尾随闭包\n\nhasAnyMatches(numbers){number -\u003e Bool in \n return number \u003c 10\n}\n\n//或者\n\nhasAnyMatches(numbers){\n number \u003c 10\n}\n```\n### 闭包\n\n``` swift\nlet closure1 = {\n (number: Int) -\u003e Int in //用in将参数和返回值类型声明与闭包函数体进行分离\n let result = 3 * number\n return result\n}\n//等同于:\nlet closure1 = {number in 3 * number} //参数类型默认为Int型,通过 3* 来自动识别,返回计算结果\n//等同于:\nlet closure1 = {3 * $0} //一切都是默认的,使用参数位置来访问参数\n\nprintln(closure1(1))\n```\n## 对象和类\n\n``` swift\nclass NamedShape {\n var numberOfSides: Int = 0\n var name: String //必须被初始化,或者定义为:var name: String?\n\n init(name: String) { //构造方法\n self.name = name //初始化 name\n }\n deinit {\n println(\"deinitialized\")\n }\n func simpleDescription() -\u003e String {\n return \"A shape with \\(numberOfSides) sides.\"\n }\n}\n\n//继承\nclass EquilateralTriangle: NamedShape {\n var sideLength: Double = 0.0\n\n init(sideLength: Double, name: String) {\n self.sideLength = sideLength\n super.init(name: name) //父方法\n numberOfSides = 3 //父变量\n }\n\n var perimeter: Double { //geter 和 seter 方法,不能和 willSet(set前) 和 didSet(set后) 共存\n set {\n sideLength = newValue / 3.0\n }\n get {\n return 3.0 * sideLength\n }\n }\n\n override func simpleDescription() -\u003e String { //覆盖父方法\n return \"An equilateral triagle with sides of length \\(sideLength).\"\n }\n}\n\nclass Triangle {\n var triangle: EquilateralTriangle { //申明 类 类型的变量\n willSet {\n println(newValue)\n }\n }\n var square:Double = 1{ //同时初始化\n willSet {\n triangle.sideLength = newValue\n println(\"willSet \\(newValue)\")\n }\n didSet(oldValue2) {\n println(\"didSet \\(oldValue2)\")\n }\n }\n init(size: Double, name: String) {\n println(\"init\")\n triangle = EquilateralTriangle(sideLength: size, name: name) //初始化变量\n }\n}\n\nvar t = Triangle(size: 12, name: \"assd\")\nt.square=21\n\n```\n### didSet 实例\n\n``` swift\nclass Foo\n{\n var propertyChangedListener : (Int, Int) -\u003e Void = { //一个返回为空,有两个参数的类方法\n println(\"The value of myProperty has changed from \\($0) to \\($1)\")\n }\n\n var myProperty : Int = 0 {\n didSet { propertyChangedListener(oldValue, self.myProperty) }\n }\n}\nvar f = Foo()\nf.myProperty = 1\n```\n## 枚举\n\n``` swift\nenum CompassPoint:Int {\n case North=1 //case 可以是一行或多行。给枚举项添加一个原始值如1,则其它的会自动叠加,如South值为2\n case South,East\n case West\n\n func simpleDescription() -\u003e String { //扩展一个方法\n switch self {\n case .North:\n return \"北\"\n case .South:\n return \"南\"\n case .East:\n return \"东\"\n case .West:\n return \"西\"\n default:\n return String(self.rawValue)\n }\n }\n}\n\nvar c = CompassPoint.North.rawValue //读取原始值\nvar c2 = CompassPoint.North //CompassPoint.init(rawValue:2) 通过原始值来取值\n\nprintln(c)\n\nc2 = .East //已知为CompassPoint类型,可以直接.East\n\nswitch c2 {\n case .East :\n println(c2.simpleDescription())\n case .North :\n println(\"c2\")\n default:\n println(\"aa\")\n}\n\n//相关值\n//原始值是预先设置好的,可以通过rawValue读取。而相关值是可以在具体使用过程中指定。\nenum Barcode {\n case UPCA(Int, Int, Int) \n case QRCode(String)\n}\n\nvar productBarcode = Barcode.UPCA(8, 85_909_51226, 3)\nproductBarcode = .QRCode(\"ABCDEFGHIJKLMNOP\")\n\n//读取相关值,注意let的用法。\nswitch productBarcode {\n case .UPCA(let numberSystem, let identifier, let check):\n println(\"UPC-A with value of \\(numberSystem), \\(identifier), \\(check).\")\n case let .QRCode(productCode):\n println(\"QR code with value of \\(productCode).\")\n}\n```\n## 协议(接口)和扩展\n### 协议\n\n``` swift\nprotocol ExampleProtocol {\n var simpleDescription: String { get }\n mutating func adjust() //如果是枚举或结构实现此协议,在方法前加mutating,协议方法前面必须加mutating关键字。\n}\n\nclass SimpleClass: ExampleProtocol {\n var simpleDescription: String = \"A very simple class.\"\n var anotherProperty: Int = 69105\n func adjust() { //类方法前不需要加mutating\n simpleDescription += \" Now 100% adjusted.\"\n }\n}\nvar a = SimpleClass()\na.adjust()\n```\n### 扩展\n\n``` swift\nextension Int: ExampleProtocol { //对原生的类方法扩展额外的功能\n var simpleDescription: String { //给Int型数据添加方法simpleDescription\n return \"The number \\(self)\"\n }\n mutating func adjust() { //使用mutating关键词声明了一个方法adjust改动了Int结构\n self += 42\n }\n}\n\n或者:\nextension Int { \n var simpleDescription: String { \n return \"The number \\(self)\"\n }\n}\n\nprintln(7.simpleDescription)\n```\n## 泛型\n\n``` swift\nfunc repeat\u003cItemType先预设一个未知数据类型供在参数或函数体里使用\u003e(item: ItemType, times: Int) -\u003e [ItemType] { //ItemType 将被自动识别为String\n var result = [ItemType]() \n for i in 0..\u003ctimes {\n result.append(item)\n }\n return result\n}\nrepeat(\"knock\", 4)\n```\n## 类和结构\n\n类和结构基本相同,最大的区别是类是**引用类型**,结构是**值类型**!\n### 闭包和函数也是 引用类型\n\n引用类型就是变量和它赋值的类、函数或闭包指向同一内存位置。参考\nhttp://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter2/07_Closures.html#closures_are_reference_types\n\n``` swift\n//定义一个结构,里面的变量自动生成构造\nstruct task{\n var name = \"name\"\n var desc = \"desc\"\n}\nvar t1 = task(name:\"1\", desc:\"222\") //结构里面的变量自动生成构造\nvar t2 = t1\nt2.name = \"name xxx\" //不影响t1的值\nprintln(t1.name)\n\n\nclass a{\n var a = 1\n var b = 2\n}\nvar a1 = a()\nvar a2 = a1\na2.a=3 //会影响a1的值\nprintln(a1.a)\n```\n","author":{"url":"https://github.com/aliencode","@type":"Person","name":"aliencode"},"datePublished":"2014-12-18T05:32:35.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/1/aliencode.github.io/issues/1"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:040f3e0f-03ff-773d-df0c-a02a9f42daa8 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BC56:1E3FD:199688B:219057D:69771406 |
| html-safe-nonce | 64434c1038eccc5f4ac18c9a21700bd866bac493be791ea54ccdf6e299995f00 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQzU2OjFFM0ZEOjE5OTY4OEI6MjE5MDU3RDo2OTc3MTQwNiIsInZpc2l0b3JfaWQiOiIzMTg1MjA1NTU0NDQ3ODQ4NDU1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 57e252174e9af5f622e3cb6d93822b49ce4555f586c2935dcca8c7195c4ca781 |
| hovercard-subject-tag | issue:52327251 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/aliencode/aliencode.github.io/1/issue_layout |
| twitter:image | https://opengraph.githubassets.com/540fa6ebbfb6fdb80e6a1ff4ed8b1d34a3478fef06193071490c954e1a19477f/aliencode/aliencode.github.io/issues/1 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/540fa6ebbfb6fdb80e6a1ff4ed8b1d34a3478fef06193071490c954e1a19477f/aliencode/aliencode.github.io/issues/1 |
| og:image:alt | 检查类型 用类型检查操作符(is)来检查一个实例是否属于特定子类型,返回 true 或 false 。 申明变量 var aaa = 1 //很长的数值可以用 _ 来分隔,如 111_222.1 = 111222.1 根据值判断变量类型 字符输出 println( "hello \(aaa) !" ); aaa 将被值替换. 字符串合并 var b = "aaa:" + String(a) ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | aliencode |
| hostname | github.com |
| expected-hostname | github.com |
| None | 01d198479908d09a841b2febe8eb105a81af2af7d81830960fe0971e1f4adc09 |
| turbo-cache-control | no-preview |
| go-import | github.com/aliencode/aliencode.github.io git https://github.com/aliencode/aliencode.github.io.git |
| octolytics-dimension-user_id | 2787688 |
| octolytics-dimension-user_login | aliencode |
| octolytics-dimension-repository_id | 22128829 |
| octolytics-dimension-repository_nwo | aliencode/aliencode.github.io |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 22128829 |
| octolytics-dimension-repository_network_root_nwo | aliencode/aliencode.github.io |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | f752335dbbea672610081196a1998e39aec5e14b |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width