日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS - PassData

發布時間:2025/3/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS - PassData 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  • 頁面傳值:

    • 復合傳值

    • 單例傳值
    • userDefaults 傳值

    • 代理傳值
    • Block/閉包傳值

1、復合傳值

  • 復合 - 正向傳值

    • 1、接收方,頭文件中創建可存放傳遞值的屬性變量
    • 2、發送方,包含接收方的頭文件
    • 3、發送方,實例化接收方對象,并設置其屬性變量的值
    • 4、接收方,將此屬性變量的值輸出
  • Objective-C

    • Page2.h

      // 1、接收方,頭文件中創建可存放傳遞值的 “屬性變量”@property(nonatomic, copy)NSString *receiveText;
    • Page1.m

      // 2、發送方,包含接收方的頭文件#import "Page2.h"// 3、發送方,實例化接收方對象,并設置其 “屬性變量” 的值Page2 *pvc2 = [[Page2 alloc] init];pvc2.receiveText = sendTextFiled.text;
    • Page2.m

      // 4、接收方,將此 “屬性變量” 的值輸出receiveLabel.text = self.receiveText;
  • Swift

    • Page2.swift

      // 1、接收方,頭文件中創建可存放傳遞值的 “屬性變量”var receiveText:String?
    • Page1.swift

      // 3、發送方,實例化接收方對象,并設置其 “屬性變量” 的值let pvc2 = Page2()pvc2.receiveText = sendTextFiled.text;
    • Page2.swift

      // 4、接收方,將此 “屬性變量” 的值輸出receiveLabel.text = self.receiveText

2、單例傳值

  • 單例 - 正/反向傳值

    • 1、創建單例類,并在其頭文件中創建可存放傳遞值的屬性變量

    • 2、發送方,包含單例類頭文件
    • 3、發送方,創建單例類對象,并為其屬性變量賦值

    • 4、接收方,包含單例類頭文件
    • 5、接收方,創建單例類對象,取其屬性變量的值,輸出

  • Objective-C

    • 創建單例類

      • SingleClass.h

        #import <Foundation/Foundation.h>@interface SingleClass : NSObject// 1、創建單例類,并在其頭文件中創建可存放傳遞值的 “屬性變量”@property (nonatomic, copy)NSString *singleText;+ (SingleClass *)sharedSingleClass;@end
      • SingleClass.m

        #import "SingleClass.h"@implementation SingleClass+ (SingleClass *)sharedSingleClass {static SingleClass *single = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{single = [[SingleClass alloc] init];});return single;}@end
    • Page3.m

      // 2、發送方,包含單例類頭文件#import "SingleClass.h"// 3、發送方,創建單例類對象,并為其 “屬性變量” 賦值[SingleClass sharedSingleClass].singleText = sendTextFiled.text;
    • Page4.m

      // 4、接收方,包含單例類頭文件#import "SingleClass.h"// 5、接收方,創建單例類對象,取其 “屬性變量” 的值,輸出receiveLabel.text = [SingleClass sharedSingleClass].singleText;
  • Swift

    • 創建單例類

      • SingleClass.swift

        import UIKitclass SingleClass {// 1、創建單例類,并創建可存放傳遞值的 “屬性變量”var singleText:String?static let sharedSingleClass = SingleClass()private init() {}}
    • Page3.swift

      // 3、發送方,創建單例類對象,并為其 “屬性變量” 賦值SingleClass.sharedSingleClass.singleText = sendTextFiled.text
    • Page4.swift

      // 5、接收方,創建單例類對象,取其 “屬性變量” 的值,輸出receiveLabel.text = SingleClass.sharedSingleClass.singleText

3、NSUserDefaults 傳值

  • NSUserDefaults - 正/反向傳值

    • 1、發送方,創建 userDefaults,并以一個固定的 key 值存儲數據,發送傳遞值
    • 2、發送方,創建 userDefaults 同步數據

    • 3、接收方,創建 userDefaults,并以相同的 key 值讀取數據,接收傳遞值

  • Objective-C

    • Page5.m

      // 1、發送方,創建 userDefaults,并以一個固定的 key 值存儲數據,發送傳遞值[[NSUserDefaults standardUserDefaults] setObject:sendTextFiled.text forKey:@"userDefaultsText"];// 2、發送方,創建 userDefaults 同步數據[[NSUserDefaults standardUserDefaults] synchronize];
    • Page6.m

      // 3、接收方,創建 userDefaults,并以相同的 key 值讀取數據,接收傳遞值receiveLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"userDefaultsText"];
  • Swift

    • Page5.swift

      // 1、發送方,創建 userDefaults,并以一個固定的 key 值存儲數據,發送傳遞值NSUserDefaults.standardUserDefaults().setObject(sendTextFiled.text, forKey: "userDefaultsText")// 2、發送方,創建 userDefaults 同步數據NSUserDefaults.standardUserDefaults().synchronize()
    • Page6.swift

      // 3、接收方,創建 userDefaults,并以相同的 key 值讀取數據,接收傳遞值receiveLabel.text = NSUserDefaults.standardUserDefaults().objectForKey("userDefaultsText") as? String

4、代理傳值

4.1 代理反向傳值

  • 代理 - 反向傳值

    • 1、創建代理協議,并在協議中創建協議方法

    • 2、委托方:發送方,包含協議頭文件
    • 3、委托方:發送方,創建代理人屬性變量
    • 4、委托方:發送方,調用協議方法,發送傳遞值

    • 5、代理方:接收方,遵守代理協議
    • 6、代理方:接收方,實例化發送方對象,并設置其代理人為 self
    • 7、代理方:接收方,實現代理協議中的方法,接收傳遞值

  • Objective-C

    • 創建協議

      • PageDelegate1.h

        #import <Foundation/Foundation.h>@protocol PageDelegate1 <NSObject>// 1、創建代理協議,并在協議中創建協議方法- (void)setLabelWithText:(NSString *)protocolText;@end
    • Page8.h

      // 2、委托方:發送方,包含協議頭文件#import "PageDelegate1.h"// 3、委托方:發送方,創建代理人屬性變量@property(nonatomic, weak)id<PageDelegate1> delegate;
    • Page8.m

      if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 4、委托方:發送方,調用協議方法,發送傳遞值[self.delegate setLabelWithText:sendTextFiled.text];}
    • Page7.m

      // 5、代理方:接收方,遵守代理協議@interface Page7 () <PageDelegate1>// 6、代理方:接收方,實例化發送方對象,并設置其代理人為 selfPage8 *pvc8 = [[Page8 alloc] init];pvc8.delegate = self;// 7、代理方:接收方,實現代理協議中的方法,接收傳遞值- (void)setLabelWithText:(NSString *)protocolText {receiveLabel.text = protocolText;}
  • Swift

    • 創建協議

      • PageDelegate1.swift

        import Foundationprotocol PageDelegate1 {// 1、創建代理協議,并在協議中創建協議方法func setLabelWithText(protocolText:String?)}
    • Page8.swift

      // 3、委托方:發送方,創建代理人屬性變量var delegate:PageDelegate1!if self.delegate != nil {// 4、委托方:發送方,調用協議方法,發送傳遞值self.delegate.setLabelWithText(sendTextFiled.text)}
    • Page7.swift

      // 5、代理方:接收方,遵守代理協議class Page7: UIViewController, PageDelegate1 {// 6、代理方:接收方,實例化發送方對象,并設置其代理人為 selflet pvc8 = Page8()pvc8.delegate = self// 7、代理方:接收方,實現代理協議中的方法,接收傳遞值func setLabelWithText(protocolText: String?) {receiveLabel.text = protocolText}

4.2 代理反向傳值封裝

  • 代理 - 反向傳值,代理封裝

    • 1、創建代理協議,并在協議中創建協議方法

    • 2、委托方:發送方,包含協議頭文件
    • 3、委托方:發送方,創建代理人屬性變量
    • 4、委托方:發送方,聲明重構的 init 初始化方法
    • 5、委托方:發送方,重構 init 初始化方法
    • 6、委托方:發送方,調用協議方法,發送傳遞值

    • 7、代理方:接收方,遵守代理協議
    • 8、代理方:接收方,用重構初始化方法實例化委托方對象,并設置其代理人為 self
    • 9、代理方:接收方,實現代理協議中的方法,接收傳遞值

  • Objective-C

    • 創建協議

      • PageDelegate2.h

        #import <Foundation/Foundation.h>@protocol PageDelegate2 <NSObject>// 1、創建代理協議,并在協議中創建協議方法- (void)setLabelWithText:(NSString *)protocolText;@end
    • Page10.h

      // 2、委托方:發送方,包含協議頭文件#import "PageDelegate2.h"// 3、委托方:發送方,創建代理人屬性變量@property(nonatomic, weak)id<PageDelegate2> delegate;// 4、委托方:發送方,聲明重構的 init 初始化方法- (instancetype)initWithTarget:(id<PageDelegate2>) delegate;
    • Page10.m

      // 重構的 init 初始化方法// 5、委托方:發送方,重構 init 初始化方法- (instancetype)initWithTarget:(id<PageDelegate2>)delegate {if (self = [super init]) {self.delegate = delegate;}return self;}if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 6、委托方:發送方,調用協議方法,發送傳遞值[self.delegate setLabelWithText:sendTextFiled.text];}
    • Page9.m

      // 7、代理方:接收方,遵守代理協議@interface Page9 () <PageDelegate2>// 8、代理方:接收方,用重構初始化方法實例化委托方對象,并設置其代理人為 selfPage10 *pvc10 = [[Page10 alloc] initWithTarget:self];// 9、代理方:接收方,實現代理協議中的方法,接收傳遞值- (void)setLabelWithText:(NSString *)protocolText {receiveLabel.text = protocolText;}
  • Swift

    • 創建協議

      • PageDelegate2.swift

        import Foundationprotocol PageDelegate2 {// 1、創建代理協議,并在協議中創建協議方法func setLabelWithText(protocolText:String?)}
    • Page10.swift

      // 3、委托方:發送方,創建代理人屬性變量var delegate:PageDelegate2!// 重構的 init 初始化方法// 5、委托方:發送方,重構 init 初始化方法init(target delegate:PageDelegate2) {// 在 ViewController 中不能使用 super.init()super.init(nibName: nil, bundle: nil)self.delegate = delegate}if self.delegate != nil {// 6、委托方:發送方,調用協議方法,發送傳遞值self.delegate.setLabelWithText(sendTextFiled.text)}
    • Page9.swift

      // 7、代理方:接收方,遵守代理協議class Page9: UIViewController, PageDelegate2 {// 8、代理方:接收方,實例化發送方對象,并設置其代理人為 selflet pvc10 = Page10(target: self)// 9、代理方:接收方,實現代理協議中的方法,接收傳遞值func setLabelWithText(protocolText: String?) {receiveLabel.text = protocolText}

4.3 代理雙向傳值

  • 代理 - 雙向傳值

  • Objective-C

    • 創建協議

      • PageDelegate3.h

        #import <Foundation/Foundation.h>@protocol PageDelegate3 <NSObject>// 帶返回值- (NSString *)setLabelWithText:(NSString *)protocolText;@end
    • Page16.h

      #import "PageDelegate3.h"@property(nonatomic, weak)id<PageDelegate3> delegate;
    • Page16.m

      - (void)viewDidLoad {if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 接收數據receiveLabel.text = [self.delegate setLabelWithText:nil];}}// 返回上一頁- (void)sendClick {if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 返回數據[self.delegate setLabelWithText:sendTextFiled.text];}[self dismissViewControllerAnimated:YES completion:nil];}
    • Page15.m

      @interface Page15 () <PageDelegate3>Page16 *pvc16 = [[Page16 alloc] init];pvc16.delegate = self;- (NSString *)setLabelWithText:(NSString *)protocolText {// 接收返回的數據receiveLabel.text = protocolText;// 正向發送數據return sendTextFiled.text;}

5、Block/閉包 傳值

5.1 block/閉包反向傳值

  • block/閉包 - 反向傳值

    • 1、發送方:創建 block/閉包 類型的變量
    • 2、發送方:調用 block/閉包,發送傳遞值

    • 3、接收方:實例化發送方對象,并實現其 block/閉包,接收傳遞值

  • Objective-C

    • Page12.h

      // 1、發送方:創建 block 類型的變量,變量名為 passDataBlock@property (nonatomic, copy)void (^passDataBlock)(NSString *);
    • Page12.m

      if (self.passDataBlock) {// 2、發送方:調用 block,發送傳遞值 self.passDataBlock(sendTextFiled.text);}
    • Page11.m

      // 3、接收方:實例化發送方對象,并實現其 block,接收傳遞值Page12 *pvc12 = [[Page12 alloc] init];pvc12.passDataBlock = ^(NSString *blockText){receiveLabel.text = blockText;};
  • Swift

    • Page12.swift

      // 1、發送方:創建閉包類型的變量var passDataClosure:((String?) -> Void)!if self.passDataClosure != nil {// 2、發送方:調用閉包,發送傳遞值self.passDataClosure(sendTextFiled.text)}
    • Page11.swift

      // 3、接收方:實例化發送方對象,并實現其閉包,接收傳遞值let pvc12 = Page12()pvc12.passDataClosure = { (closureText:String?) inself.receiveLabel.text = closureText}

5.2 block/閉包反向傳值封裝

  • block/閉包 - 反向傳值,block/閉包 封裝

    • 1、發送方:創建 block/閉包 類型的變量
    • 2、發送方:聲明重構 init 初始化方法
    • 3、發送方:重構 init 初始化方法
    • 4、發送方:調用 block/閉包,發送傳遞值

    • 5、接收方:用重構初始化方法實例化發送方對象,并實現其 block/閉包,接收傳遞值

  • Objective-C

    • Page14.h

      typedef void (^pagePassDataBlock)(NSString *);// 1、發送方:創建 block 類型的變量,變量名為 passDataBlock@property (nonatomic, copy)pagePassDataBlock passDataBlock;// 2、發送方:聲明重構 init 初始化方法- (instancetype)initWithBlock:(pagePassDataBlock)dataBlock;
    • Page14.m

      // 重構 init 初始化方法// 3、發送方:重構 init 初始化方法- (instancetype)initWithBlock:(pagePassDataBlock)dataBlock {if (self = [super init]) {self.passDataBlock = dataBlock;}return self;}if (self.passDataBlock) {// 4、發送方:調用 block,發送傳遞值self.passDataBlock(sendTextFiled.text);}
    • Page13.m

      // 5、接收方:用重構初始化方法實例化發送方對象,并實現其 block,接收傳遞值Page14 *pvc14 = [[Page14 alloc] initWithBlock:^(NSString *blockText) {receiveLabel.text = blockText;}];
  • Swift

    • Page14.swift

      // 1、發送方:創建閉包類型的變量var passDataClosure:((String?) -> Void)!// 重構 init 初始化方法// 3、發送方:重構 init 初始化方法init(closure:((String?) -> Void)) {super.init(nibName: nil, bundle: nil)self.passDataClosure = closure}if self.passDataClosure != nil {// 4、發送方:調用閉包,發送傳遞值self.passDataClosure(sendTextFiled.text)}
    • Page13.swift

      let pvc14 = Page14 { (closureText:String?) in// 5、接收方:用重構初始化方法實例化發送方對象,并實現其 block/閉包,接收傳遞值self.receiveLabel.text = closureText}

5.3 block/閉包雙向傳值

  • block/閉包 - 雙向傳值

  • Objective-C

    • Page18.h

      // 帶返回值@property (nonatomic, copy)NSString * (^passDataBlock)(NSString *);
    • Page18.m

      - (void)viewDidLoad {[super viewDidLoad];if (self.passDataBlock) {// 接收數據receiveLabel.text = self.passDataBlock(nil);}}// 返回上一頁- (void)sendClick {if (self.passDataBlock) {// 返回數據self.passDataBlock(sendTextFiled.text);}[self dismissViewControllerAnimated:YES completion:nil];}
    • Page17.m

      Page18 *pvc18 = [[Page18 alloc] init];pvc18.passDataBlock = ^(NSString * blockText){// 接收返回的數據receiveLabel.text = blockText;// 正向發送數據return sendTextFiled.text;};

總結

以上是生活随笔為你收集整理的iOS - PassData的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。