OCBridgeSwiftToCall: передача данных между OC и Swift
Введение
Данный проект представляет собой обзор различных способов передачи значений между Objective-C (OC) и Swift. В нём рассматриваются такие методы, как передача значений через свойства, использование блоков кода, делегатов и уведомлений.
Если у вас есть вопросы о мосте между OC и Swift, обратитесь к статье «Взаимный вызов OC и Swift» на сайте Gitee.com/chenzm_186/OCBrigdeSwiftDemo.
Проектное введение
@objc func btnAction(_ sender:UIButton){
let subVC = SubVC();
self.present(subVC, animated: true) {
NSLog("👺👺👺:%@", subVC);
};
NSLog("👺👺👺:%@____%@",sender,self);
}
self.dismiss(animated: true) {
NSLog("Возврат");
};
func postNotifition(){
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "XMNotification"), object: "Уведомление метода");
}
-(void)addNotification{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notiAction:) name:@"XMNotification" object:nil];
}
-(void)notiAction:(NSNotification *)sender{
NSLog(@"oc:%@",sender.object);
}
-(void)removeNotification{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"XMNotification" object:nil];
}
func postNotifition(){
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "XMNotification"), object: "Метод уведомления");
}
@objc func addNotification(){
NotificationCenter.default.addObserver(self, selector: #selector(notificationAction(_:)), name: NSNotification.Name(rawValue: "XMNotification"), object: nil);
}
@objc func removeNotifition() {
NotificationCenter.default.removeObserver(self);
}
@objc private func notificationAction(_ noti : Notification){
let str:String = noti.object as! String;
print("swift:" + str);
}
Результат печати уведомлений:
///1、Редактирование протокола
@objc(FourVCDelegate)
protocol FourVCDelegate {
func backSuperVC(str:String)
}
///2、Определение объекта протокола
@objc var myDelegate:FourVCDelegate?;
///3、Вызов протокола
let str:String = "Метод делегата";
self.myDelegate?.backSuperVC(str: str);
///1、Вызов протокола
@interface FirVC ()<FourVCDelegate>
///2、Подписание протокола
-(SecVC *)seVc{
if (!_seVc) {
_seVc = [SecVC new];
_seVc.myDelegate = self;
}
return _seVc;
}
///3、Реализация протокола
-(void)backSuperVCWithStr:(NSString *)str{
NSLog(@"%@", str);
}
Результат вызова метода делегата:
###5. Вызов блока кода из Swift в OC
///Определение блока кода
@property(nonatomic,strong)void (^thiBlock)(NSString *str);
///Реализация блока кода
!self.thiBlock?:self.thiBlock(@"Swift вызывает блок кода OC");
let vc = ThiVC();
///Вызов блока кода
vc.thiBlock = {(str) -> () in
print("Метод блока");
}
self.present(vc, animated: true, completion: {
});
###6. Передача свойств, вызов методов и блоков кода между OC и Swift
import UIKit
class FourVC: UIViewController {
///Массив
@objc var arr0:NSArray = NSArray()
///Без параметров без возвращаемого значения
@objc func swMethod0(){
print("Без параметров без возвращаемого значения");
}
///С параметрами без возвращаемого значения
@objc func swMethod1(str: String) {
print("С параметрами без возвращаемого значения:\(str)");
}
///С параметрами с возвращаемым значением
@objc func swMethod2(str: String) -> (String){
return "С параметрами с возвращаемым значением:" + str;
}
/// mark - Блок кода
/// Без возвращаемых параметров
@objc func bkBlock0(response:() -> ()){
response();
}
///Возвращает строку параметра
@objc func bkBlock1(response:(_ res : String) -> ()) {
response("Возвращает строку параметра");
}
/// Возвращает несколько параметров любого типа
@objc func bkBlock_2_(response:(_ res : Any,_ res1 : Any) -> ()) {
response(self.arr0, "Без параметров, возвращает несколько параметров любого типа:");
}
///Передача нескольких параметров и возвращение нескольких параметров любого типа
@objc func bkBlock3(p1:Any,p2:Any,p3:Any,res:(_ res0 : Any ,_ res1 : Any ,_ res2:Any,_ res3:Any) -> ()) {
res("Передаёт несколько параметров и возвращает несколько параметров любого типа:\n",p1, p2, p3);
}
///Блок кода с возвращаемым значением
@objc func bkBlock4(res:() -> ()) -> (String){
res();
return "Блок кода с возвращаемым значением"
}
}
``` ```
bkBlock4(cmdStr: String?, blockProperty: funcBlock) {
blockProperty("backMsg---by block inside func")
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.yellow
print("属性传值结果:", self.arr0[0], self.arr0[1], arr0[2])
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.dismiss(animated: true) {}
}
Это похоже на язык Swift.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )