当前位置:网站首页>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 :

  1. Once you encounter an agreed exception , The program must be compatible , You must not let the program Crash
  2. 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)

  1. Try to avoid declaring implicitly optional types , Unless it can be determined that it must have value when used
  2. Avoid using as! or try! Equal coercion , Use ! If abnormal, it will definitely lead to Crash
  3. 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 var

  • 2. When declaring class methods and properties , priority of use static Instead of class

  • 3. 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 guard sentence , instead of if sentence , 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)
    }
    
    // 
    
原网站

版权声明
本文为[Julie^_^ JuneLee]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140737439787.html