欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

iOSblock基本使用方法 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

iOSblock基本使用方法

發(fā)表時間:2021-1-4

發(fā)布人:葵宇科技

瀏覽次數(shù):63


我們可以把Block當作一個閉包函數(shù),它可以訪問外部變量和局部變量,但默認是不可以修改外部變量。
你可以使用它來做回調(diào)方法,比起使用代理(Delegate)會更加直觀。
一、Block的基本定義
Block的基本寫法(也是詳細寫法):
returnType (^blockName)(params) = ^returnType(params) {
    // code... 
};

返回類型 (^Block的名字)(Block的參數(shù)) = ^返回類型(Block的參數(shù)) { 這里放代碼 },例:
int (^myBlock)(int num1, int num2) = ^int(int num1, int num2){
    return 100;
};

 
如果你的Block不需要返回類型和參數(shù),那么你可以簡寫為:
void (^myBlock2)() = ^(){
    
};


void (^myBlock2)(void) = ^void(void){
    
};

返回類型或參數(shù),沒有的話可以用“void”代替。
 
你也可以把等于號右邊,^后的()刪除,即是:
void (^myBlock2)() = ^{
    
};

 
你也可以先定義一個Block函數(shù),但不寫函數(shù)的實現(xiàn),我們可以在后面再寫具體函數(shù)的實現(xiàn),像這樣:
void (^myBlock2)(void);
myBlock2 = ^{
    
};

 
 
二、Block作為方法定義
把Block定義在方法里,與上面不同的是,Block的名字不需要在聲明時寫上,而是在后面,像這樣:
[img]http://common.cnblogs.com/images/copycode.gif
- (void)getWtihBlock:(void (^)())block
{
    // code...
    
    // 記得要調(diào)用block
    block();
}

[img]http://common.cnblogs.com/images/copycode.gif
 
使用方法:
[self getWtihBlock:^{
    NSLog(@"sdf");
}];

 
下面作了一個詳細點的例子,并寫了備注:
[img]http://common.cnblogs.com/images/copycode.gif
/**
 *  追加自身字符串N次(每次復(fù)制前加一個換行\(zhòng)n)
 *
 *  @param string      字符串
 *  @param count       追加次數(shù)
 *  @param stringBlock 目標Block,其中str參數(shù)為結(jié)果字符串
 */
 // Block也可以定義在方法里,但是不需要定義Block的名字
 // IOS開發(fā)很多的API也用到了Block,像UIView的塊動畫
- (void)getStrWithString:(NSString *)string
               CopyCount:(int)count
            resultString:(void (^)(NSString *str))stringBlock
{
    NSMutableString *newString = [NSMutableString stringWithString:string];
    for (NSUInteger i = 0; i < count; i++) {
        NSUInteger len = [string length];
        NSString *insertString = [NSString stringWithFormat:@"\n%@", string];
        [newString insertString:insertString atIndex:len];
    }
    // 調(diào)用block,傳入字符串newString
    stringBlock(newString);
}

[img]http://common.cnblogs.com/images/copycode.gif
 
用法也是一樣:
[img]http://common.cnblogs.com/images/copycode.gif
BlockObject *block = [[BlockObject alloc] init];
[block getStrWithString:@"Garvey"
              CopyCount:3
           resultString:^(NSString *str) {
               // str為處理后的結(jié)果
               NSLog(@"str is %@", str);
           }];

[img]http://common.cnblogs.com/images/copycode.gif
 
有時候復(fù)雜的Block語法會令到函數(shù)的聲明難以閱讀,所以會經(jīng)常使用typedef對Block起一個新類型。
typedef void (^ResultBlock)(NSString *str);

 
定義方法時就變成了:
- (void)getStrWithString2:(NSString *)string
                CopyCount:(int)count
             resultString:(ResultBlock)stringBlock;

 
讓我們對比一下,使用typedef前后:
[img]http://common.cnblogs.com/images/copycode.gif
// 使用前
- (void)getStrWithString:(NSString *)string
               CopyCount:(int)count
            resultString:(void (^)(NSString *str))stringBlock;

// 使用后
- (void)getStrWithString2:(NSString *)string
                CopyCount:(int)count
             resultString:(ResultBlock)stringBlock;

[img]http://common.cnblogs.com/images/copycode.gif
注意:使用方法是一樣的,只不過定義變得簡單了。

相關(guān)案例查看更多