当前位置:网站首页>Technology sharing swift defense programming
Technology sharing swift defense programming
2022-07-05 03:28:00 【Julie^_^ JuneLee】
1、 background
For developers to write code more effectively , Probability of preventing errors , We are in the process of code design and writing , Try to make sure your code doesn't make mistakes , Defensive programming enables us to find small problems as soon as possible , Instead of waiting until customers give feedback or receive abnormal crashes ?
As a developer , Few people can swear that their programs are 100% non bug, So moderate defense will improve development quality and reduce debugging bug Time for
An effective way to defend against coding :
- Once you encounter an agreed exception , The program must be compatible , You must not let the program Crash
- Once you encounter a predetermined exception , Just run out , If the upper layer does not deal with , be Crash
2、 Defensive programming habits
- 1.
If not necessary , Don't add entities or classes: If you can do the same thing with fewer things , Then add more variables or entities 、 You need energy to maintain , It's also more likely to go wrong - 2.
Don't rush to write code: Every line of code you start writing needs to think twice , Consider what kind of mistakes may occur , Consider all possible situations - 3.
Dispose of compilation warnings as much as possible: Handling compilation warnings is a good habit , Compilation warnings may hide certain errors - 4.
Check all return values: Check the return value of the method or property , Prevent exceptions - 5.
Use cast cautiously: Cast needs to consider the input parameter type , Handle with care , Explain the coercion as clearly as possible - 6.
Check the boundary of the value: For the value 、 The range of the array should be judged , Many lessons of historical collapse are caused by crossing the border
3、Swift Some points needing attention in
3.1、 optional type (Optional Type)
- Try to avoid declaring implicitly optional types , Unless it can be determined that it must have value when used
- Avoid using
as!ortry!Equal coercion , Use!If abnormal, it will definitely lead to Crash - Be careful to use forced unpacking for optional variables , Optional default values can be used
The value of an optional variable , May be nil, If forced unpacking is used for optional variables , The context needs to be clear , Otherwise, there may be Crash
var test: String?
print(test) //nil
print(test!) //error、Crash
Better use , Use money to judge or use let Variable
if test != nil {
}
if let tempTest = test {
}
3.2 When multiple operators are combined , Use parentheses to prioritize
let flag = true || false && false
let flag1 = (true || false) && false
let flag2 = true || (false && false)
Print the results
flag = true
flag1 = false
flag2 = true
first line : The naked eye can't see who has a high level of operation
The second line : hold || Operations are enclosed in parentheses , Higher priority
The third line : hold && Operations are enclosed in parentheses , Higher priority
According to the printing results ,&& The priority ratio || high
3.3 Call in closure self Avoid circular references
Closures are commonly used , Will be [weak self] Put it in front of the closure parameter
testBlock() {
[weak self] name in
self?.doSomething()
}
4、swift Some specifications in
1. Use as much as possible
let, Be able to use let You don't have to var2. When declaring class methods and properties , priority of use
staticInstead ofclass3. If the function has no arguments , The function body is simple , Only some objects or values are fed back , It is recommended to use calculated properties
struct Square { var side: CGFloat = 2.0 // recommend var girth: CGFloat { return side * 4 } // Not recommended // func girth() -> CGFloat { // return side * 4 // } // recommend func halfGirth() -> CGFloat { self.side = side * 0.5 return side * 4 } // Not recommended // var halfGirth: CGFloat { // self.side = side * 0.5 // return side * 4 // }4. Enumerating using the preferred set switch When the sentence is , Do not include default, conversely ,switch You need to use default Including other situations
5. When expanding optional parameters , Recommended
guardsentence , instead ofifsentence , Reduce code nesting or indentation 、 Increase code readability// recommend guard let tempTest = test else { return } doSomething(on: tempTest) // Not recommended if let tempTest = test { doSomething(on: tempTest) } //
边栏推荐
- Idea inheritance relationship
- Design of KTV intelligent dimming system based on MCU
- Kubernetes - identity and authority authentication
- 2021 Li Hongyi machine learning (1): basic concepts
- Kbp206-asemi rectifier bridge kbp206
- El select, El option drop-down selection box
- Machine learning experiment report 1 - linear model, decision tree, neural network part
- [groovy] loop control (number injection function implements loop | times function | upto function | downto function | step function | closure can be written outside as the final parameter)
- SPI and IIC communication protocol
- Kubernetes -- cluster expansion principle
猜你喜欢

端口,域名,协议。

College Students' innovation project management system
![[groovy] loop control (number injection function implements loop | times function | upto function | downto function | step function | closure can be written outside as the final parameter)](/img/45/6cb796364efe16d54819ac10fb7d05.jpg)
[groovy] loop control (number injection function implements loop | times function | upto function | downto function | step function | closure can be written outside as the final parameter)

Asemi rectifier bridge 2w10 parameters, 2w10 specifications, 2w10 characteristics

Tencent cloud, realize image upload

Sqoop命令

Pat class a 1162 postfix expression

Zero foundation uses paddlepaddle to build lenet-5 network

Elk log analysis system

Azkaban概述
随机推荐
Delphi read / write JSON format
Master Fur
Class inheritance in C #
Idea inheritance relationship
Voice chip wt2003h4 B008 single chip to realize the quick design of intelligent doorbell scheme
Qrcode: generate QR code from text
SQL performance optimization skills
SFTP cannot connect to the server # yyds dry goods inventory #
Yyds dry goods inventory intelligent fan based on CC2530 design
看 TDengine 社区英雄线上发布会,听 TD Hero 聊开发者传奇故事
Daily question 2 12
About MySQL database connection exceptions
Vb+access hotel service management system
What is the most effective way to convert int to string- What is the most efficient way to convert an int to a String?
MySQL winter vacation self-study 2022 11 (10)
2021 Li Hongyi machine learning (3): what if neural network training fails
Good documentation
2. Common request methods
Utilisation simple de devtools
Cette ADB MySQL prend - elle en charge SQL Server?