dnrops.gitlink.net/posts/swift/learn_swift.html

895 lines
54 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML>
<html lang="en" class="coal" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>learn swift basics - Andrew&#x27;s Blog</title>
<!-- Custom HTML head -->
<meta name="description" content="Andrew Ryan&#x27;s Blog">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../../favicon.svg">
<link rel="shortcut icon" href="../../favicon.png">
<link rel="stylesheet" href="../../css/variables.css">
<link rel="stylesheet" href="../../css/general.css">
<link rel="stylesheet" href="../../css/chrome.css">
<!-- Fonts -->
<link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../../highlight.css">
<link rel="stylesheet" href="../../tomorrow-night.css">
<link rel="stylesheet" href="../../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<link rel="stylesheet" href="../../src/style/custom.css">
<!-- MathJax -->
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</head>
<body class="sidebar-visible no-js">
<div id="body-container">
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "coal" : "coal";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('coal')
html.classList.add(theme);
var body = document.querySelector('body');
body.classList.remove('no-js')
body.classList.add('js');
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var body = document.querySelector('body');
var sidebar = null;
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
body.classList.remove('sidebar-visible');
body.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item affix "><a href="../../index.html">Andrew's Blog</a></li><li class="chapter-item "><a href="../../posts/linux/linux.html"><strong aria-hidden="true">1.</strong> linux</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/linux/install_linux.html"><strong aria-hidden="true">1.1.</strong> install linux</a></li><li class="chapter-item "><a href="../../posts/linux/bash_profile.html"><strong aria-hidden="true">1.2.</strong> bash profile</a></li><li class="chapter-item "><a href="../../posts/linux/command_list.html"><strong aria-hidden="true">1.3.</strong> command list</a></li><li class="chapter-item "><a href="../../posts/linux/git_guide.html"><strong aria-hidden="true">1.4.</strong> git guide</a></li><li class="chapter-item "><a href="../../posts/linux/tar.html"><strong aria-hidden="true">1.5.</strong> tar</a></li><li class="chapter-item "><a href="../../posts/linux/run_x86_elf_in_x64_setup.html"><strong aria-hidden="true">1.6.</strong> run x86 elf in x64 setup</a></li></ol></li><li class="chapter-item "><a href="../../posts/mac/mac.html"><strong aria-hidden="true">2.</strong> mac</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/mac/macos_profiles.html"><strong aria-hidden="true">2.1.</strong> macos profiles</a></li></ol></li><li class="chapter-item expanded "><a href="../../posts/swift/swift.html"><strong aria-hidden="true">3.</strong> swift</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../posts/swift/learn_swift.html" class="active"><strong aria-hidden="true">3.1.</strong> learn swift basics</a></li><li class="chapter-item "><a href="../../posts/swift/swift_extensions.html"><strong aria-hidden="true">3.2.</strong> Swift extensions</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_extension.html"><strong aria-hidden="true">3.3.</strong> SwiftUI extensions</a></li><li class="chapter-item "><a href="../../posts/swift/install_swift.html"><strong aria-hidden="true">3.4.</strong> install swift</a></li><li class="chapter-item "><a href="../../posts/swift/task_planner.html"><strong aria-hidden="true">3.5.</strong> implment task panner app with SwiftUI</a></li><li class="chapter-item "><a href="../../posts/swift/swift_cheat_sheet.html"><strong aria-hidden="true">3.6.</strong> Swift Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/swift/yinci_url.html"><strong aria-hidden="true">3.7.</strong> Personal privacy protocol</a></li><li class="chapter-item "><a href="../../posts/swift/swift_regular_exressions.html"><strong aria-hidden="true">3.8.</strong> Swift regular exressions</a></li><li class="chapter-item "><a href="../../posts/ios/how_to_create_beautiful_ios_charts_in_swift.html"><strong aria-hidden="true">3.9.</strong> How to Create Beautiful iOS Charts in鑱絊wift</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_source_code.html"><strong aria-hidden="true">3.10.</strong> SwiftUI source code</a></li><li class="chapter-item "><a href="../../posts/swift/use_swift_fetch_iciba_api.html"><strong aria-hidden="true">3.11.</strong> use swift fetch iciba API</a></li></ol></li><li class="chapter-item "><a href="../../posts/ios/ios.html"><strong aria-hidden="true">4.</strong> ios</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ios/cocaposd_setup_and_install_for_ios_project.html"><strong aria-hidden="true">4.1.</strong> cocaposd setup and install for ios project</a></li><li class="chapter-item "><a href="../../posts/ios/swiftui_show_gif_image.html"><strong aria-hidden="true">4.2.</strong> SwiftUI show gif image</a></li><li class="chapter-item "><a href="../../posts/ios/implement_task_planner_app.html"><strong aria-hidden="true">4.3.</strong> implement Task planner App</a></li></ol></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c.html"><strong aria-hidden="true">5.</strong> objective_c</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/objective_c/objective_c_cheat_sheet.html"><strong aria-hidden="true">5.1.</strong> Objective-C Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c_for_absolute_beginners_read_note.html"><strong aria-hidden="true">5.2.</strong> Objective-C Note</a></li></ol></li><li class="chapter-item "><a href="../../posts/dart/dart.html"><strong aria-hidden="true">6.</strong> dart</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/dart/flutter.html"><strong aria-hidden="true">6.1.</strong> Flutter Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/dart/dart_cheat_sheet.html"><strong aria-hidden="true">6.2.</strong> Dart Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/flutter/flutter_dev_test.html"><strong aria-hidden="true">6.3.</strong> Flutter dev test</a></li></ol></li><li class="chapter-item "><a href="../../posts/rust/rust.html"><strong aria-hidden="true">7.</strong> rust</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/rust/offline_use_rust.html"><strong aria-hidden="true">7.1.</strong> Offline use rust</a></li><li class="chapter-item "><a href="../../posts/rust/rust_grammer.html"><strong aria-hidden="true">7.2.</strong> rust grammar</a></li><li class="chapter-item "><a href="../../posts/rust/pase_string_and_decimal_conversion.html"><strong aria-hidden="true">7.3.</strong> pase string and decimal conversion</a></li><li class="chapter-item "><a href="../../posts/rust/parse_types.html"><strong aria-hidden="true">7.4.</strong> rust types</a></li><li class="chapter-item "><a href="../../posts/rust/rust_life_cycle.html"><strong aria-hidden="true">7.5.</strong> Rust life cycle</a></li><li class="chapter-item "><a href="../../posts/rust/rust_generic.html"><strong aria-hidden="true">7.6.</strong> rust generics</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implment_matrix.html"><strong aria-hidden="true">7.7.</strong> Rust implement matrix</a></li><li class="chapter-item "><a href="../../posts/rust/rust_sort.html"><strong aria-hidden="true">7.8.</strong> Rust implement sort algorithms</a></li><li class="chapter-item "><a href="../../posts/rust/implement_aes_encryption.html"><strong aria-hidden="true">7.9.</strong> Rust implement AEC encryption and decryption</a></li><li class="chapter-item "><a href="../../posts/rust/implement_trie_data_structure.html"><strong aria-hidden="true">7.10.</strong> implement trie data structure</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_tree.html"><strong aria-hidden="true">7.11.</strong> implement tree data_structure</a></li><li class="chapter-item "><a href="../../posts/rust/list_dir.html"><strong aria-hidden="true">7.12.</strong> list dir</a></li><li class="chapter-item "><a href="../../posts/rust/fast_way_to_implment_object_trait.html"><strong aria-hidden="true">7.13.</strong> fast way to implment object trait</a></li><li class="chapter-item "><a href="../../posts/rust/compress_rust_binary_size.html"><strong aria-hidden="true">7.14.</strong> compress rust binary size</a></li><li class="chapter-item "><a href="../../posts/rust/implment_file_upload_backend.html"><strong aria-hidden="true">7.15.</strong> impliment file upload</a></li><li class="chapter-item "><a href="../../posts/rust/this_is_add_post_cli_implementation_in_rust.html"><strong aria-hidden="true">7.16.</strong> this is add_post cli implementation in rust</a></li><li class="chapter-item "><a href="../../posts/rust/use_rust_implment_a_copyclipbord_cli.html"><strong aria-hidden="true">7.17.</strong> Use rust implment a copyclipbord CLI</a></li><li class="chapter-item "><a href="../../posts/rust/sqlite_database_add_delete_update_show_in_rust.html"><strong aria-hidden="true">7.18.</strong> sqlite database add delete update show in rust</a></li><li class="chapter-item "><a href="../../posts/rust/implementing_tokio_joinhandle_for_wasm.html"><strong aria-hidden="true">7.19.</strong> Implementing tokio JoinHandle for wasm</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_a_crate_for_encode_and_decode_brainfuck_and_ook.html"><strong aria-hidden="true">7.20.</strong> rust implement a crate for encode and decode brainfuck and ook</a></li><li class="chapter-item "><a href="../../posts/rust/slint_builtin_elements.html"><strong aria-hidden="true">7.21.</strong> Slint Builtin Elements</a></li><li class="chapter-item "><a href="../../posts/rust/corporate_network_install_rust_on_windows.html"><strong aria-hidden="true">7.22.</strong> Corporate network install Rust on windows</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_file_how_to_judge_static_link_or_dynamic_link_in_macos.html"><strong aria-hidden="true">7.23.</strong> rust binary file how to judge static link or dynamic link in Macos</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_include_dir_and_get_contents.html"><strong aria-hidden="true">7.24.</strong> rust binary include dir and get contents</a></li><li class="chapter-item "><a href="../../posts/rust/rust_logger_non-block.html"><strong aria-hidden="true">7.25.</strong> rust logger non-block</a></li><li class="chapter-item "><a href="../../posts/rust/rust_connect_sql_server_database.html"><strong aria-hidden="true">7.26.</strong> rust connect sql server database</a></li><li class="chapter-item "><a href="../../posts/rust/rust_websocket_implment.html"><strong aria-hidden="true">7.27.</strong> rust websocket implment</a></li></ol></li><li class="chapter-item "><a href="../../posts/java/java.html"><strong aria-hidden="true">8.</strong> java</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/java/java_grammar.html"><strong aria-hidden="true">8.1.</strong> java grammar and codewar</a></li><li class="chapter-item "><a href="../../posts/java/run_jar.html"><strong aria-hidden="true">8.2.</strong> java run .jar</a></li><li class="chapter-item "><a href="../../posts/java/java_pomxml_add_defaultgoal_to_build.html"><strong aria-hidden="true">8.3.</strong> Java pomxml add defaultGoal to build</a></li><li class="chapter-item "><a href="../../posts/java/java_set_mvn_mirror.html"><strong aria-hidden="true">8.4.</strong> Java set mvn mirror</a></li></ol></li><li class="chapter-item "><a href="../../posts/python/python.html"><strong aria-hidden="true">9.</strong> python</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/python/convert_pesn.html"><strong aria-hidden="true">9.1.</strong> convert pesn</a></li><li class="chapter-item "><a href="../../posts/python/find_remove_dir.html"><strong aria-hidden="true">9.2.</strong> find and remove dir</a></li><li class="chapter-item "><a href="../../posts/python/timing_message.html"><strong aria-hidden="true">9.3.</strong> wechat send message</a></li><li class="chapter-item "><a href="../../posts/python/use_python_openpyxl_package_read_and_edit_excel_files.html"><strong aria-hidden="true">9.4.</strong> Use python openpyxl package read and edit excel files</a></li></ol></li><li class="chapter-item "><a href="../../posts/go/go.html"><strong aria-hidden="true">10.</strong> go</a></li><li class="chapter-item "><a href="../../posts/js/js.html"><strong aria-hidden="true">11.</strong> js</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/js/js_tutorial.html"><strong aria-hidden="true">11.1.</strong> js tutorial</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_map.html"><strong aria-hidden="true">11.2.</strong> ja map</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_math.html"><strong aria-hidden="true">11.3.</strong> js math</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_object.html"><strong aria-hidden="true">11.4.</strong> js object</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_set.html"><strong aria-hidden="true">11.5.</strong> js set</a></li><li class="chapter-item "><a href="../../posts/js/single_thread_and_asynchronous.html"><strong aria-hidden="true">11.6.</strong> single thread and asynchronous</a></li><li class="chapter-item "><a href="../../posts/js/this.html"><strong aria-hidden="true">11.7.</strong> js this</a></li><li class="chapter-item "><a href="../../posts/js/js_implment_aes.html"><strong aria-hidden="true">11.8.</strong> js implment aes</a></li><li class="chapter-item "><a href="../../posts/js/getting_started_with_ajax.html"><strong aria-hidden="true">11.9.</strong> getting started with ajax</a></li><li class="chapter-item "><a href="../../posts/js/BinarySearchTree.html"><strong aria-hidden="true">11.10.</strong> binary search tree</a></li><li class="chapter-item "><a href="../../posts/js/goole_zx.html"><strong aria-hidden="true">11.11.</strong> goole zx</a></li><li class="chapter-item "><a href="../../posts/js/es6.html"><strong aria-hidden="true">11.12.</strong> es6</a></li></ol></li><li class="chapter-item "><a href="../../posts/ruby/ruby.html"><strong aria-hidden="true">12.</strong> ruby</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ruby/rails_setup_env.html"><strong aria-hidden="true">12.1.</strong> ruby on rails setup environment</a></li><li class="chapter-item "><a href="../../posts/ruby/learn_ruby.html"><strong aria-hidden="true">12.2.</strong> learn ruby</a></li><li class="chapter-item "><a href="../../posts/ruby/ruby_note.html"><strong aria-hidden="true">12.3.</strong> Ruby Note</a></li><li class="chapter-item "><a href="../../posts/ruby/setup_ruby_for_ctf.html"><strong aria-hidden="true">12.4.</strong> Setup ruby for CTF</a></li></ol></li><li class="chapter-item "><a href="../../posts/react/react.html"><strong aria-hidden="true">13.</strong> react</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/react/react_life_cycle.html"><strong aria-hidden="true">13.1.</strong> react life cycle</a></li><li class="chapter-item "><a href="../../posts/react/react_router.html"><strong aria-hidden="true">13.2.</strong> react router</a></li><li class="chapter-item "><a href="../../posts/react/react_this.html"><strong aria-hidden="true">13.3.</strong> react this</a></li><li class="chapter-item "><a href="../../posts/react/react_interviw.html"><strong aria-hidden="true">13.4.</strong> react interview</a></li><li class="chapter-item "><a href="../../posts/react/important_react_interview.html"><strong aria-hidden="true">13.5.</strong> important react interview</a></li><li class="chapter-item "><a href="../../posts/react/react_quick_reference.html"><strong aria-hidden="true">13.6.</strong> react quick reference</a></li><li class="chapter-item "><a href="../../posts/react/redux_quick_reference.html"><strong aria-hidden="true">13.7.</strong> redux quick reference</a></li></ol></li><li class="chapter-item "><a href="../../posts/vue/vue.html"><strong aria-hidden="true">14.</strong> vue</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/vue/vue_ajax.html"><strong aria-hidden="true">14.1.</strong> vue ajax</a></li></ol></li><li class="chapter-item "><a href="../../posts/angular/angular.html"><strong aria-hidden="true">15.</strong> angular</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/angular/controller_communication.html"><strong aria-hidden="true">15.1.</strong> controller communication</a></li><li class="chapter-item "><a href="../../posts/angular/creating_custom_directives.html"><strong aria-hidden="true">15.2.</strong> creating custom directives</a></li><li class="chapter-item "><a href="../../posts/angular/directive_notes.html"><strong aria-hidden="true">15.3.</strong> directive notes</a></li><li class="chapter-item "><a href="../../posts/angular/directive_communication.html"><strong aria-hidden="true">15.4.</strong> directive communication</a></li><li class="chapter-item "><a href="../../posts/angular/post_params.html"><strong aria-hidden="true">15.5.</strong> post params</a></li><li class="chapter-item "><a href="../../posts/angular/read_json_angular.html"><strong aria-hidden="true">15.6.</strong> read json angular</a></li><li class="chapter-item "><a href="../../posts/angular/same_route_reload.html"><strong aria-hidden="true">15.7.</strong> same route reload</a></li></ol></li><li class="chapter-item "><a href="../../posts/css/css.html"><strong aria-hidden="true">16.</strong> css</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/css/use_css_media.html"><strong aria-hidden="true">16.1.</strong> use css media</a></li></ol></li><li class="chapter-item "><a href="../../posts/php/php.html"><strong aria-hidden="true">17.</strong> php</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/php/for_php_string_implment_some_extemtion_functions.html"><strong aria-hidden="true">17.1.</strong> for php string implment some extemtion functions</a></li><li class="chapter-item "><a href="../../posts/php/php_cheatsheet.html"><strong aria-hidden="true">17.2.</strong> PHP cheatsheet</a></li></ol></li><li class="chapter-item "><a href="../../posts/leetcode/leetcode.html"><strong aria-hidden="true">18.</strong> leetcode</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/leetcode/rust_leetcode.html"><strong aria-hidden="true">18.1.</strong> rust leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_codewar.html"><strong aria-hidden="true">18.2.</strong> rust codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/swift_codewar.html"><strong aria-hidden="true">18.3.</strong> swift codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/js_leetcode.html"><strong aria-hidden="true">18.4.</strong> js leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/java_leetcode.html"><strong aria-hidden="true">18.5.</strong> java leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_huawei.html"><strong aria-hidden="true">18.6.</strong> huawei test</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_utils.html"><strong aria-hidden="true">18.7.</strong> rust common functions</a></li><li class="chapter-item "><a href="../../posts/leetcode/olympiad_training.html"><strong aria-hidden="true">18.8.</strong> Computer olympiad training</a></li></ol></li><li class="chapter-item "><a href="../../posts/ctf/CTF.html"><strong aria-hidden="true">19.</strong> ctf</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ctf/CTF_Note.html"><strong aria-hidden="true">19.1.</strong> CTF Note</a></li><li class="chapter-item "><a href="../../posts/ctf/0.1_Web.html"><strong aria-hidden="true">19.2.</strong> Web</a></li><li class="chapter-item "><a href="../../posts/ctf/4.1_Misc.html"><strong aria-hidden="true">19.3.</strong> Misc</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">19.4.</strong> PWN</a></li><li class="chapter-item "><a href="../../posts/ctf/3.1_Crypto.html"><strong aria-hidden="true">19.5.</strong> Crypto</a></li><li class="chapter-item "><a href="../../posts/ctf/3.4_RSA_note.html"><strong aria-hidden="true">19.6.</strong> Rsa attack</a></li><li class="chapter-item "><a href="../../posts/ctf/3.5_Base64.html"><strong aria-hidden="true">19.7.</strong> Base64</a></li><li class="chapter-item "><a href="../../posts/ctf/0.0_SQL Injection Cheatsheet.html"><strong aria-hidden="true">19.8.</strong> SQL Injection Cheatsheet</a></li><li class="chapter-item "><a href="../../posts/ctf/1.1_SQL_injection.html"><strong aria-hidden="true">19.9.</strong> SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.2_SQL_injection_UNION_attacks.html"><strong aria-hidden="true">19.10.</strong> SQL Injection UNION attacks</a></li><li class="chapter-item "><a href="../../posts/ctf/1.3_Blind SQL injection.html"><strong aria-hidden="true">19.11.</strong> Blind SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.4_Code Injection.html"><strong aria-hidden="true">19.12.</strong> Code Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.5_SSRF.html"><strong aria-hidden="true">19.13.</strong> SSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.6_OS command injection.html"><strong aria-hidden="true">19.14.</strong> OS command injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.7_Local file inclusion.html"><strong aria-hidden="true">19.15.</strong> Local file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.8_Remote file inclusion.html"><strong aria-hidden="true">19.16.</strong> Remote file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.9_CSRFm.html"><strong aria-hidden="true">19.17.</strong> CSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.10_NoSQL injection.html"><strong aria-hidden="true">19.18.</strong> NoSQL injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.11_JSON injection.html"><strong aria-hidden="true">19.19.</strong> JSON injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.12_CTF_Web_SQL_Note.html"><strong aria-hidden="true">19.20.</strong> CTF Web SQL Note</a></li><li class="chapter-item "><a href="../../posts/ctf/2.1_XXE.html"><strong aria-hidden="true">19.21.</strong> XXE</a></li><li class="chapter-item "><a href="../../posts/ctf/2.2_XSS.html"><strong aria-hidden="true">19.22.</strong> XSS</a></li><li class="chapter-item "><a href="../../posts/ctf/2.3_Upload File.html"><strong aria-hidden="true">19.23.</strong> Upload File</a></li><li class="chapter-item "><a href="../../posts/ctf/2.4_serialize_unserialize.html"><strong aria-hidden="true">19.24.</strong> serialize unserialize</a></li><li class="chapter-item "><a href="../../posts/ctf/2.5_Race condition.html"><strong aria-hidden="true">19.25.</strong> Race condition</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">19.26.</strong> PWN_note</a></li><li class="chapter-item "><a href="../../posts/ctf/3.3_pwn HCTF2016 brop.html"><strong aria-hidden="true">19.27.</strong> pwn HCTF2016 brop</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_patch_defense_skill.html"><strong aria-hidden="true">19.28.</strong> PWN Patch defense skill</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_stack_overflow.html"><strong aria-hidden="true">19.29.</strong> PWN stack overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_heap_overflow.html"><strong aria-hidden="true">19.30.</strong> PWN heap overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_format_string_vulnerability.html"><strong aria-hidden="true">19.31.</strong> PWN Format String Vulnerability</a></li><li class="chapter-item "><a href="../../posts/ctf/kali_linux_tutorials.html"><strong aria-hidden="true">19.32.</strong> Kali linux tutorials</a></li><li class="chapter-item "><a href="../../posts/ctf/google_dorks_2023_lists.html"><strong aria-hidden="true">19.33.</strong> Google Dorks 2023 Lists</a></li><li class="chapter-item "><a href="../../posts/ctf/dvwa_writeup.html"><strong aria-hidden="true">19.34.</strong> DVWA WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/bwapp_writeup.html"><strong aria-hidden="true">19.35.</strong> bWAPP WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/sqlilabs_writeup.html"><strong aria-hidden="true">19.36.</strong> sqlilabs WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/ctf_train_at_hangzhou.html"><strong aria-hidden="true">19.37.</strong> ctf train at hangzhou</a></li><li class="chapter-item "><a href="../../posts/ctf/ctf_common_mindmap_list.html"><strong aria-hidden="true">19.38.</strong> ctf common mindmap list</a></li><li class="chapter-item "><a href="../../posts/ctf/error_based_sql_injection.html"><strong aria-hidden="true">19.39.</strong> Error Based SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/urlfinder_tutorial.html"><strong aria-hidden="true">19.40.</strong> URLFinder Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/observer_ward_tutorial.html"><strong aria-hidden="true">19.41.</strong> observer_ward Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/mysql_udf_.html"><strong aria-hidden="true">19.42.</strong> MySQL UDF 提权</a></li><li class="chapter-item "><a href="../../posts/ctf/nuclei__tutorial.html"><strong aria-hidden="true">19.43.</strong> Nuclei Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/2024_ctf_solution_thinking.html"><strong aria-hidden="true">19.44.</strong> 2024 ctf solution thinking</a></li><li class="chapter-item "><a href="../../posts/ctf/man_che_si_te_bian_ma.html"><strong aria-hidden="true">19.45.</strong> 曼彻斯特编码</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<!-- Track and set sidebar scroll position -->
<script>
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
sidebarScrollbox.addEventListener('click', function(e) {
if (e.target.tagName === 'A') {
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
}
}, { passive: true });
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
sessionStorage.removeItem('sidebar-scroll');
if (sidebarScrollTop) {
// preserve sidebar scroll position when navigating via links within sidebar
sidebarScrollbox.scrollTop = sidebarScrollTop;
} else {
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
var activeSection = document.querySelector('#sidebar .active');
if (activeSection) {
activeSection.scrollIntoView({ block: 'center' });
}
}
</script>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Andrew&#x27;s Blog</h1>
<div class="right-buttons">
<a href="https://gitlink.org.cn/dnrops/dnrops.gitlink.net.git" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="learn-swift-grammar"><a class="header" href="#learn-swift-grammar">learn swift grammar</a></h1>
<h2 id="common"><a class="header" href="#common">common</a></h2>
<pre><code class="language-swift">import Foundation
typealias i8 = Int8
typealias i16 = Int16
typealias i32 = Int32
typealias i64 = Int64
typealias isize = Int
typealias u8 = UInt8
typealias u16 = UInt16
typealias u32 = UInt32
typealias u64 = UInt64
typealias usize = UInt
typealias f32 = Float
typealias f64 = Double
typealias char = Character
typealias string = String
typealias Option = Optional
typealias bool = Bool
typealias Codable = Decodable &amp; Encodable
typealias Debug = CustomDebugStringConvertible
typealias VecDeque = BidirectionalCollection
typealias Vec = Collection
public enum Results&lt;T&gt; {
case OK(T)
case Err(T)
}
public enum Err: Error {
case notEqual(String)
}
func assertEqual&lt;T:Equatable&gt;(_ result1:T,_ result2:T)-&gt;Result&lt;String,Error&gt;{
if result1 == result2 {
return Result.success("expected \(result1) found \(result2)")
}else{
return Result.failure(Err.notEqual("expected \(result1) found \(result2)"))
}
}
func assertEq&lt;T:Equatable&gt;(_ result1:T,_ result2:T){
let result = assertEqual(result1,result2)
switch result {
case .success:
print("\(result)")
break
case .failure:
print("\(result)")
break
}
}
// assertEq(threeSum([-1, -1, -1, -1, 2, 1, -4, 0], target: 0),[[-1, -1, 2], [-1, 0, 1]])
</code></pre>
<h2 id="basic"><a class="header" href="#basic">basic</a></h2>
<pre><code class="language-swift">// Number
var int = 10
var float = 12.15
//Boolean
var have = true
var have_not = false
//print type of value
var numberOfPets = 4
print(type(of: numberOfPets))
var numberOfPetsDouble: Double = 4
print(type(of: numberOfPetsDouble))
var inchesDouble = 4.1243
print(type(of: inchesDouble))
var inchesFloat: Float = 4.1243
print(type(of: inchesFloat))
// String
var hstr = "hello world "
hstr.append("to the world")// push
//convert number to string by radix
let s0 = String(1635999) // returns "1635999"
let s1 = String(1635999, radix: 10) // returns "1635999"
let s2 = String(1635999, radix: 2) // returns "110001111011010011111"
let s3 = String(1635999, radix: 16) // returns "18f69f"
let s4 = String(1635999, radix: 16, uppercase: true) // returns "18F69F"
let s5 = String(1635999, radix: 17) // returns "129gf4"
let s6 = String(1635999, radix: 36) // returns "z2cf"
print("s3:\(s3)")
//String start_with,end_with
let is_start_with = "/demo".hasPrefix("/")
let is_end_with = "demo/".hasSuffix("/")
let long_string = """
is_start_with /:\(is_start_with)
is_end_with /:\(is_end_with)
"""
print(long_string)
//push string
var s7 = ""
s7.write("write") //like rusts push_str()
s7.append("append ") //like rusts push_str()
s7.append("🌍") //like rusts push() char
print("s7:\(s7)")
//slice string get prefix 前面的元素
var ss7 = s7.prefix(1)
print("ss7:\(ss7)")
//slice string get suffix 后面的元素
var ss8 = s7.suffix(1)
print("ss8:\(ss8)")
//split string
print("\(s7.split(separator: " "))") //["writeappend", "🌍"]
print("\(s7.split(separator: " ",maxSplits:0))") //["writeappend"]
print("\(s7.split(separator: " ",omittingEmptySubsequences:false))") //["writeappend", "🌍"] 不省略空
let s8 = "Hello!"
let bytes = s8.utf8CString
print(bytes)// Prints "[72, 101, 108, 108, 111, 33, 0]"
// reverse string
let w = "Backwards"
for char in w.reversed() {
print(char, terminator: "")
}
var ns1 = String("demo")
let numbers = 0...9
let shuffledNumbers = numbers.shuffled()
print("\(shuffledNumbers)")
//Array
var emptyAray = [String]()
var names = ["John", "Sansa", "Theon", "Jaime"]
names.insert("Varys", at: 2) //insert
names.append("Robb") //push back
names.remove(at: 3) //remove at index of 2
let words = ["apple", "orange", "banana"]
print("\(words.count)")
let new_names = ["Zoey", "Chloe", "Amani", "Amaia"]
let randomName = new_names.randomElement()!
let str = words.joined(separator:" : ")//json array to string
//Dictionaries
var emptyDict = [Int:Double]()
var capitalCities = ["Russia":"Moscow",
"Canada": "Ottawa", "France": "Paris"]
capitalCities["Germany"] = "Berlin"
capitalCities["Canada"] = "Toronto"
print(capitalCities)
for city in capitalCities{
print("The capital city of \(city.key) is \(city.value).")
}
//if else
var n = 10;
if n&lt;9{
print(n);
}
else if n==10{
print("is \(10)");
}
else {
}
//simplified ifelse statement
let age = 25
let haveCar = age&gt;28 ? true:false
print("have \(haveCar)")
//swich
var country = "Sweden"
switch country {
case "Germany":
print("This country is in Europe")
case "Sweden":
print("This country is in Europe")
case "USA":
print("This country is in North America")
case "India":
print("This country is in Asia")
case "Egypt":
print("This country is in Africa")
default:
print("Sorry i don't know the continent of this country")
}
let testscore = 80
var grade:Character
switch testscore {
case 90...100:
grade = "优"
case 80..&lt;90:
grade = "良"
case 60..&lt;80:
grade = "中"
case 0..&lt;60:
grade = "差"
default:
grade = "无"
}
print("Grade = \(grade)")
// Loop
//for in loop
let listOfNames = ["John", "Sansa", "Theon","Jaime", "Robb", "Thyrion"]
for name in listOfNames {
print("listOfNames:\(name)")
}
//while loop
var startValue = 1
let endValue = 10
while startValue &lt;= endValue {
print("startValue \(startValue)")
startValue += 1
}
//repeat-while-loop
var m = 2
repeat{
m*=2
}while m&lt;10
print("m is: \(m)")
//Function
func ourFirstFunction() {
print("I love Swift!")
}
ourFirstFunction()
func sayHi(from name:String){
print("Hi \(name)")
}
func sayHi1(name:String){
print("Hi \(name)")
}
sayHi(from:"Andrew")
sayHi1(name:"Andrew")
func doubleTheInput(inputValue: Int) -&gt; Int {
return inputValue*2
}
print("Double the input:\(doubleTheInput(inputValue:5))")
// Classes
class Car {
let horsepower = 100
let color = "red"
var numberOfCarDoors = 4
}
let myCar = Car()
// myCar.colour = "blue" //will error because let means that is constant value
myCar.numberOfCarDoors = 6
print("my car numberOfCarDoors :\(myCar.numberOfCarDoors)")
class NewCar {
let horsepower:Int
let color:String
let numberOfCarDoors:Int
init(horsepower: Int, color: String,numberOfCarDoors: Int) {
self.horsepower = horsepower
self.color = color
self.numberOfCarDoors = numberOfCarDoors
}
func engineOn() {
print("Engined turned on.")
}
func engineOff() {
print("Engine turned off.")
}
}
let myNewCar = NewCar(horsepower: 120, color:"green", numberOfCarDoors: 4)
print("my new car horsepower:\(myNewCar.horsepower)")
myNewCar.engineOn()
myNewCar.engineOff()
//Class Inheritance (对象继承)
class Person {
var firstName: String
var lastName: String
init(firstName: String, lastName: String){
self.firstName = firstName
self.lastName = lastName
}
func greetings() {
print("Hi, my name is \(firstName) \(lastName)!")
}
}
//Employee 继承Person class
class Employee: Person {
var staffNummer: Int
init(staffNummer: Int, firstName: String,lastName: String) {
self.staffNummer = staffNummer
super.init(firstName: firstName,lastName: lastName)//继承必须使用super.init()类初始化父类
}
func identity() {
print("First name \(firstName), Lastname \(lastName), Staff Number \(staffNummer)")
}
}
let christine = Employee(staffNummer: 780,firstName: "Christine", lastName: "Mayer")
christine.greetings() //调用父类的方法
christine.identity() //调用自己的方法
//Class overriding 重载 (替换父类的方法)
class Student:Person {
var stuId:String
init(stuId:String,firstName:String,lastName:String) {
self.stuId = stuId
super.init(firstName:firstName,lastName:lastName)
}
func sayStuId(){
print(stuId)
}
// overriding greetings
override func greetings() {
print("Hello, how are you?") //We override the function of the superclass
}
}
let ryan = Student(stuId:"1820012",firstName:"Andrew",lastName:"Ryan")
ryan.sayStuId()
ryan.greetings()
//Optionals 跟Rust的Option 一样
var ourFirstOptional: Int?
ourFirstOptional = 4
if let insideValue = ourFirstOptional { //just like rusts if let statement
print(insideValue)
} else {
print("Optional contains nil")
}
var studentOptional:Student?;
studentOptional?.sayStuId() //Nothing will happen
studentOptional?.greetings()//Nothing will happen
studentOptional = Student(stuId:"1820012",firstName:"Andrew",lastName:"Ryan")
studentOptional?.sayStuId() //will print id
//implment stack
struct Stack&lt;T&gt; : ExpressibleByArrayLiteral, CustomDebugStringConvertible {
var debugDescription: String {
get {
return "Stack: \(storage)"
}
}
typealias Element = T
private var storage: [T] = []
public init(arrayLiteral elements:Element...) {
self.storage = elements
}
mutating func push(_ item:T) {
storage.insert(item, at: 0)
}
mutating func pop() -&gt; T? {
guard storage.count &gt; 0 else { return nil }
return storage.remove(at: 0)
}
}
//栈 先进后出
var stack = Stack&lt;i8&gt;()
for i in 0...5{
stack.push(i8(i))
}
print("pop from stack:\(stack.pop()!)")
print("\(stack)")
learnArgument()
learnInput()
learnDir()
learnJSON()
learnTime()
learnSets()
learnResult()
</code></pre>
<h2 id="learnargument"><a class="header" href="#learnargument">learnArgument</a></h2>
<pre><code class="language-swift">import Foundation
// get arguments
func learnArgument(){
let args = CommandLine.arguments
if args.count != 2 {
print("Usage: cmd")
} else {
let name = args[1]
print("Name: \(name)")
}
}
</code></pre>
<h2 id="learninput"><a class="header" href="#learninput">learnInput</a></h2>
<pre><code class="language-swift">import Foundation
/// Inputs
var cin: String {
readLine()!
}
var cinArray: [Character] {
Array(cin)
}
extension String {
func str2(separator: Character = " ") -&gt; (String, String) {
let a = split(separator: separator).map { String($0) }
precondition(a.count == 2)
return (a[0], a[1])
}
func strs(separator: Character = " ") -&gt; [String] {
split(separator: separator).map { String($0) }
}
func int() -&gt; Int {
guard let v = Int(self) else {
fatalError()
}
return v
}
func int2(separator: Character = " ") -&gt; (Int, Int) {
let a = split(separator: separator).map { Int($0)! }
precondition(a.count == 2)
return (a[0], a[1])
}
func int3(offset: Int = 0, separator: Character = " ") -&gt; (Int, Int, Int) {
let a = split(separator: separator).map { Int($0)! + offset }
precondition(a.count == 3)
return (a[0], a[1], a[2])
}
func int4(separator: Character = " ") -&gt; (Int, Int, Int, Int) {
let a = split(separator: separator).map { Int($0)! }
precondition(a.count == 4)
return (a[0], a[1], a[2], a[3])
}
func int5(separator: Character = " ") -&gt; (Int, Int, Int, Int, Int) {
let a = split(separator: separator).map { Int($0)! }
precondition(a.count == 5)
return (a[0], a[1], a[2], a[3], a[4])
}
func int6(separator: Character = " ") -&gt; (Int, Int, Int, Int, Int, Int) {
let a = split(separator: separator).map { Int($0)! }
precondition(a.count == 6)
return (a[0], a[1], a[2], a[3], a[4], a[5])
}
func ints(separator: Character = " ") -&gt; [Int] {
split(separator: separator).map { Int($0)! }
}
func float() -&gt; Float {
guard let v = Float(self) else {
fatalError()
}
return v
}
func float2(separator: Character = " ") -&gt; (Float, Float) {
let a = split(separator: separator).map { Float($0)! }
precondition(a.count == 2)
return (a[0], a[1])
}
func float3(separator: Character = " ") -&gt; (Float, Float, Float) {
let a = split(separator: separator).map { Float($0)! }
precondition(a.count == 3)
return (a[0], a[1], a[2])
}
func float4(separator: Character = " ") -&gt; (Float, Float, Float, Float) {
let a = split(separator: separator).map { Float($0)! }
precondition(a.count == 4)
return (a[0], a[1], a[2], a[3])
}
func floats(separator: Character = " ") -&gt; [Float] {
split(separator: separator).map { Float($0)! }
}
func double() -&gt; Double {
guard let v = Double(self) else {
fatalError()
}
return v
}
func double2(separator: Character = " ") -&gt; (Double, Double) {
let a = split(separator: separator).map { Double($0)! }
precondition(a.count == 2)
return (a[0], a[1])
}
func double3(separator: Character = " ") -&gt; (Double, Double, Double) {
let a = split(separator: separator).map { Double($0)! }
precondition(a.count == 3)
return (a[0], a[1], a[2])
}
func double4(separator: Character = " ") -&gt; (Double, Double, Double, Double) {
let a = split(separator: separator).map { Double($0)! }
precondition(a.count == 4)
return (a[0], a[1], a[2], a[3])
}
func doubles(separator: Character = " ") -&gt; [Double] {
split(separator: separator).map { Double($0)! }
}
}
func learnInput(){
let in_string = cin
let in_string_arr = in_string.strs(separator:" ")
print("in_string_arr: \(in_string_arr)")
}
</code></pre>
<h2 id="learndir"><a class="header" href="#learndir">learnDir()</a></h2>
<pre><code class="language-swift">import Foundation
func learnDir(){
let homeDir = NSHomeDirectory()
let userName = NSUserName()
if let home_user = NSHomeDirectoryForUser("andrew"){
print("\(homeDir),\(userName),\(home_user)")
}
let pwd = URL(fileURLWithPath: "./")
print("\(pwd)")
}
</code></pre>
<h2 id="learnjson"><a class="header" href="#learnjson">learnJSON</a></h2>
<pre><code class="language-swift">import Foundation
struct Employeer: Codable {
var name:String
var id: Int
var mToy:Toy
}
struct Toy:Codable {
var name:String
}
extension Employeer:Debug {
var debugDescription: String {
return name + "(" + String(id) + "): " + mToy.name
}
}
func learnJSON(){
/// encode instance to jsonString
let toyA = Toy(name: "Teddy Bear")
let employeeA = Employeer(name: "EmployA", id:1, mToy:toyA)
let jsonEncoder = JSONEncoder()
let jsonData = try? jsonEncoder.encode(employeeA)
// jsonData contains an unreadable representation of employeeA
print("jsonData: \(String(describing:jsonData))")
let jsonString = String(data: jsonData!, encoding: .utf8)
print("jsonString: \(String(describing:jsonString))")
/// decode jsonString to instance
let jsonDecoder = JSONDecoder()
let employeeADecoded = try? jsonDecoder.decode(Employeer.self, from: jsonData!)
print(employeeADecoded!)//result
/*
jsonData: Optional(54 bytes)
jsonString: Optional("{\"name\":\"EmployA\",\"id\":1,\"mToy\":{\"name\":\"Teddy Bear\"}}")
EmployA(1): Teddy Bear
*/
}
</code></pre>
<h2 id="learntime"><a class="header" href="#learntime">learnTime</a></h2>
<pre><code class="language-swift">import Foundation
extension Date {
/// 获取当前 秒级 时间戳 - 10位
var timeStamp : String {
let timeInterval: TimeInterval = self.timeIntervalSince1970
let timeStamp = Int(timeInterval)
return "\(timeStamp)"
}
/// 获取当前 毫秒级 时间戳 - 13位
var milliStamp : String {
let timeInterval: TimeInterval = self.timeIntervalSince1970
let millisecond = CLongLong(round(timeInterval*1000))
return "\(millisecond)"
}
}
func learnTime(){
//当前时间
let dformatter = DateFormatter()
dformatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
print("当前日期时间:\(dformatter.string(from: Date()))")
//TimeStamp 时间戳
let millisecond = Date().milliStamp
print("当前毫秒级时间戳是 millisecond == ",millisecond)
let timeStamp = Date().timeStamp
print("当前秒级时间戳是 timeStamp == ",timeStamp)
//将时间戳转为日期时间
let timeStamp1 = 1463637809
print("时间戳:\(timeStamp1)")
let timeInterval:TimeInterval = TimeInterval(timeStamp1)
let date = Date(timeIntervalSince1970: timeInterval)//转换为时间
let dformatter1 = DateFormatter()
dformatter1.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
print("对应的日期时间:\(dformatter1.string(from: date))")//格式话输出
//获取当前时区
let zone = NSTimeZone.system
print("zone = \(zone)")
//获取当前时区和GMT的时间间隔
let interval = zone.secondsFromGMT()
print("interval = \(interval)")// 当前时区和格林威治时区的时间差 8小时 = 28800秒
print("interval = \(interval/3600)")// 输出当前系统时区
//获取当前系统时间
let now = Date().addingTimeInterval(TimeInterval(interval))
print("now time = \(now)")// 是Date格式不是String
}
/**
输出结果
当前日期时间2022年12月21日 00:42:10
当前毫秒级时间戳是 millisecond == 1671554530990
当前秒级时间戳是 timeStamp == 1671554530
时间戳1463637809
对应的日期时间2016年05月19日 14:03:29
*/
</code></pre>
<h2 id="learnsets"><a class="header" href="#learnsets">learnSets</a></h2>
<pre><code class="language-swift">import Foundation
func learnSets(){
var primes: Set = [2, 3, 5, 7,55]
if primes.isEmpty {
print("No primes!")
} else {
primes.insert(77)
print("We have \(primes.count) primes.")
}
let primesSum = primes.reduce(0, +)
let primeStrings = primes.sorted().map(String.init)
print("primesSum:\(primesSum)")
print("primeStrings:\(primeStrings)")
primes.remove(77)
primes.removeFirst()
if let index = primes.firstIndex(of:55){
primes.remove(at:index)
}
let smallNums = primes.filter { $0 &lt; 5 }
print("smallNums:\(smallNums)")
// Tests whether primes is a subset of a Range&lt;Int&gt;
print(primes.isSubset(of: 0..&lt;10))
// Prints "true"
// Performs an intersection with an Array&lt;Int&gt;
let favoriteNumbers = [5, 7, 15, 21]
print(primes.intersection(favoriteNumbers)) //集合的交集
}
</code></pre>
<h2 id="learnresult"><a class="header" href="#learnresult">learnResult</a></h2>
<pre><code class="language-swift">func getResult()-&gt;Results&lt;String&gt; {
Results.OK("ok")
}
func learnResult(){
print("\(getResult())")
}
</code></pre>
<h2 id="impliment-like-pythons-system-function-with-swift"><a class="header" href="#impliment-like-pythons-system-function-with-swift">impliment like pythons system function with swift</a></h2>
<pre><code class="language-swift">//python's os.system()
import Foundation
#if os(Linux)
func system(_ command: String) -&gt; Void {
let task = Process()
task.executableURL = URL(fileURLWithPath: "/bin/sh")
task.arguments = ["-c", command]
do {
try task.run()
task.waitUntilExit()
} catch {
print("Error: \(error.localizedDescription)")
}
}
system("ls")
#elseif os(macOS)
func system(_ command: String) -&gt; Void {
let task = Process()
task.executableURL = URL(fileURLWithPath: "/bin/sh")
task.arguments = ["-c", command]
do {
try task.run()
task.waitUntilExit()
} catch {
print("Error: \(error.localizedDescription)")
}
}
system("ls")
#elseif os(Windows)
func system_cmd(_ command: String) -&gt; Void {
let task = Process()
task.executableURL = URL(fileURLWithPath: "cmd")
task.arguments = ["/c", command]
do {
try task.run()
task.waitUntilExit()
} catch {
print("Error: \(error.localizedDescription)")
}
}
system_cmd("ping dnrops.gitee.io")
func system_powershell(_ command: String) -&gt; Void {
let task = Process()
task.executableURL = URL(fileURLWithPath: "powershell")
task.arguments = ["-Command", command]
do {
try task.run()
task.waitUntilExit()
} catch {
print("Error: \(error.localizedDescription)")
}
}
system_powershell("ping dnrops.gitee.io")
#else
let platform = "Unknown"
print("This operating system is not supported.")
#endif
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../../posts/swift/swift.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../../posts/swift/swift_extensions.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../../posts/swift/swift.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../../posts/swift/swift_extensions.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../../ace.js"></script>
<script src="../../editor.js"></script>
<script src="../../mode-rust.js"></script>
<script src="../../theme-dawn.js"></script>
<script src="../../theme-tomorrow_night.js"></script>
<script src="../../elasticlunr.min.js"></script>
<script src="../../mark.min.js"></script>
<script src="../../searcher.js"></script>
<script src="../../clipboard.min.js"></script>
<script src="../../highlight.js"></script>
<script src="../../book.js"></script>
<!-- Custom JS scripts -->
<script src="../../src/js/custom.js"></script>
</div>
</body>
</html>