Swift’s use of closed bag

  • The simplest way to write closures, here is the format
{(parameters) -> return type in
   statements
}

Examples

//let append = {(str1 aa:String ,Str2 bb: String)-> String in error, the closure has no external parameter name
let append = {(str1:String,Str2: String)-> String in
  print("\(str1)------\(Str2)")//20------30
    return "\(str1)\(Str2)"//2030
}
//print(append(str1:"20",str2:"30")) error, no need to pass parameter names in the closure
print(append("20","30"))//2030

The above is equivalent to

let append: (String, String) -> String = {
    (str1, str2) in return str1 + str2
}
print(append("one", "two"))//onetwo

  • If there are no parameters but a return value, you can write like this
< pre class="brush:csharp;gutter:true;">//If there is no parameter, you can just omit “in”. If you add in, an error will be reported here
let test: () -> String = {
return “test closure”
}
print(test())//test closure
  • No parameter, no return value
 let test: () -> Void = {
    print("test closure")//output: test closure
}
test()

  • There can be no parameters in the closure, but there is no return value, otherwise an error will be reported
let test: (String) -> void = {//An error is reported here

(str1) in print(str1)
}

  • Delay of closure
func showYouTest(testBlock: @escaping () -> Void) {
    //Do a delayed operation
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
        //Call the closure after five seconds
        testBlock()
    }
    print("I am a function")
}

showYouTest {
   print("11111111111111111111")//5 seconds later execute here
}

{(parameters) -> return type in
   statements
}

//let append = {(str1 aa:String,Str2 bb: String)-> String in error, closed Package has no external parameter name
let append = {(str1:String,Str2: String)-> String in
  print("\(str1)------\(Str2)")//20------30
    return "\(str1)\(Str2)"//2030
}
//print(append(str1:"20",str2:"30")) error, no need to pass parameter names in the closure
print(append("20","30"))//2030

let append: (String, String) -> String = {
    (str1, str2) in return str1 + str2
}
print(append("one", "two"))//onetwo

//If there is no parameter, you can just omit "in". If you add in, an error will be reported here
let test: () -> String = {
    return "test closure"
}
print(test())//test closure

let test: () -> Void = {
    print("test closure")//output: test closure
}
test()

let test: (String) -> void = {//An error is reported here

(str1) in print(str1)
}

func showYouTest(testBlock: @escaping () -> Void) {
    //Do a delayed operation
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
        //Call the closure after five seconds
        testBlock()
    }
    print("I am a function")
}

showYouTest {
   print("11111111111111111111")//5 seconds later execute here
}

Leave a Comment

Your email address will not be published.