• OCswift混编中的相互跳转和传值

    前段时间在开发项目中遇到了OC和swift混编的情况,下面就相互跳转和传值分享一下自己的经验:


    1.OC----> swift

    首先要在OC中引用swift头文件,写法是 #import "(项目名)-swift.h"

    跳转:

    swiftClearViewController *VC = [[swiftClearViewController alloc]init];

    [self.navigationController pushViewController:VC animated:YES];

    当需要传值时首先要在swift中定义变量

    然后就可以正常的进行传值了


    2.swift---->OC

    还是要引用头文件,这里的方法是创建桥接头文件,具体方法不再赘述

    跳转和传值和上面类似


    展开全文
  • 最新一些学妹问起,所以抽点时间来写的,适合入门级别的swiftOC 混编 的程序猿。 本文章将从两个方向分别介绍 OCswift 混编 1. 第一个方向从 swift工程 中引入 oc类   1. 1 如何在swift的类中使用...
    
    

    目录(?)[+]

    最新一些学妹问起,所以抽点时间来写的,适合入门级别的swift 与 OC 混编 的程序猿。  

    本文章将从两个方向分别介绍 OC 与 swift 混编  


    1. 第一个方向从 swift工程 中引入 oc类 

        1. 1 如何在swift的类中使用oc类
        1.2  如何在swift中实现oc的代理方法
        1.3   如何在swift中实现oc的Block回调

    2. 第二个方向从OC工程中引入swift类

        2.1  如何在OC类中使用swift类
        2.2   如何在OC中实现swift的代理方法
        2.3   如何在OC中实现swift中类似Block回调


    下面是具体的实现过程:

     1.1  如何在swift的类中使用oc类? 

    1.  Swift工程中引入OC类。 具体实现过程。

        1.1 新建一个swift工程类。 取名 swiftOrOC

        1.2  实现的功能为 :  从swift. viewController.swift 中 push到 OC语言 secondViewController 控制器

    1.2.1  新建SecondViewController 类 。

            

         1.2.2 建立桥接文件。 (很重要)


        一定要记得点击这个按钮。 

           1.2.3  接下来工程目录如下:

           

         1.2.4 接下来就可以实现具体的跳转功能了。 

          ViewController.swift中具体实现

         

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. import UIKit  
    2.   
    3. class ViewController: UIViewController {  
    4.   
    5.     @IBOutlet weak var hintLabel: UILabel!  //稍后用来显示回调  
    6.       
    7.     // push 到 oc controller  
    8.     @IBAction func pushAction(_ sender: AnyObject) {  
    9.         let secondVC = SecondViewController.init()  
    10.         self.navigationController?.pushViewController(secondVC, animatedtrue)  
    11.     }  
    12.       
    13.     override func viewDidLoad() {  
    14.         super.viewDidLoad()  
    15.         // Do any additional setup after loading the view, typically from a nib.  
    16.     }  
    17.   
    18.     override func didReceiveMemoryWarning() {  
    19.         super.didReceiveMemoryWarning()  
    20.         // Dispose of any resources that can be recreated.  
    21.     }  
    22.   
    23.   
    24. }  


    1.2 如何在swift中实现oc的代理方法

           1.2.1 首先在 SecondViewController.h 中声明一个协议。具体代码

            

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import <UIKit/UIKit.h>  
    2.   
    3. @protocol SecondDelegate <NSObject>  
    4.   
    5. -(void)refreshHintLabel:(NSString *)hintString;  
    6.   
    7. @end  
    8.   
    9. @interface SecondViewController : UIViewController  
    10.   
    11. @property (nonatomic,weak)id<SecondDelegate> secondDelegate;  
    12. @end  
         1.2.2 然后在SecondViewController.m中,通过一个UITextField,让用户输入内容,当用户点击返回的时候把输入框中的内容返回给对应的代理。具体代码如下

        

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import "SecondViewController.h"  
    2. #import "UIViewController+BackButtonHandler.h"  
    3.   
    4. @interface SecondViewController ()  
    5. {  
    6.     UITextField *textField;  
    7. }  
    8. @end  
    9.   
    10. @implementation SecondViewController  
    11.   
    12. - (void)viewDidLoad {  
    13.     [super viewDidLoad];  
    14.     self.title = @"oc";  
    15.       
    16.     self.view.backgroundColor  = [UIColor whiteColor];  
    17.       
    18.     textField = [[UITextField alloc]initWithFrame:CGRectMake(100100200200)];  
    19.     textField.placeholder = @"请输入用户名";  
    20.     [self.view addSubview:textField];  
    21.     [textField.layer setBorderColor:[UIColor blackColor].CGColor];  
    22.     [textField.layer setBorderWidth:1.0];  
    23.   
    24.       
    25. }  
    26.   
    27. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{  
    28.     [self.view endEditing:YES];  
    29. }  
    30. #pragma mark 返回上一页回调 ,将用户输入的用户名传回给 ViewController.swift  
    31. -(BOOL)navigationShouldPopOnBackButton{  
    32.     if ([_secondDelegate respondsToSelector:@selector(refreshHintLabel:)]) {  
    33.         [_secondDelegate refreshHintLabel: textField.text];  
    34.     }  
    35.       
    36.     return YES;  
    37. }  
    38.   
    39.   
    40. - (void)didReceiveMemoryWarning {  
    41.     [super didReceiveMemoryWarning];  
    42.     // Dispose of any resources that can be recreated.  
    43. }  
    44.   
    45. /* 
    46. #pragma mark - Navigation 
    47.  
    48. // In a storyboard-based application, you will often want to do a little preparation before navigation 
    49. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    50.     // Get the new view controller using [segue destinationViewController]. 
    51.     // Pass the selected object to the new view controller. 
    52. } 
    53. */  
    54.   
    55. @end  
      1.2.3 接下来就非常简单了,让ViewController.swift只需要成为SecondViewController的代理,然后遵循她的协议,就可以了。 具体代码如下。

           1.2.3.1 遵循协议

      

         1.2.3.2 成为代理,并实现协议方法,更改controller.swift中hintLabel的text。

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. // push 到 oc controller  
    2. @IBAction func pushAction(_ sender: AnyObject) {  
    3.     let secondVC = SecondViewController.init()  
    4.     secondVC.secondDelegate = self;  
    5.     self.navigationController?.pushViewController(secondVC, animatedtrue)  
    6. }  
    7.   
    8. // SecondViewControll的代理方法  
    9. func refreshHintLabel(_ hintString: String!) {  
    10.     hintLabel.text = "secondView textView.text = " + hintString;  
    11. }  

     1.3   如何在swift中实现oc的Block回调

    1.3.1 具体过程与1.2小节一样。 直接上代码。

            1.3.2 声明block;

             

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. typedef void(^RefreshHintLabelBlock)(NSString *hintString);  
    2.   
    3. @interface SecondViewController : UIViewController  
    4. @property (nonatomiccopy) RefreshHintLabelBlock hintBlock;  
    5. @end  

            1.3.3 block的回调。 SecondViewController.m中

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #pragma mark 返回上一页回调 ,将用户输入的用户名传回给 ViewController.swift  
    2. -(BOOL)navigationShouldPopOnBackButton{      
    3.     if (_hintBlock) {  
    4.         _hintBlock(textField.text);  
    5.     }  
    6.     return YES;  
    7. }  

            1.3.4 在swift类中调用 oc的block.

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. // push 到 oc controller  
    2. @IBAction func pushAction(_ sender: AnyObject) {  
    3.     let secondVC = SecondViewController.init()  
    4.       secondVC.secondDelegate = self;  
    5.     secondVC.hintBlock = {(t:String?)in  
    6.         self.hintLabel.text = "secondView textView.text = " + t!  
    7.     }  
    8.     self.navigationController?.pushViewController(secondVC, animatedtrue)  
    9. }  


       工程已上传到Git上,git地址: https://github.com/zhonggaorong/SwiftOrOc/tree/master

    2.  OC工程中引入swift类。 具体实现过程。

        耽误了不少时间, 今天才开始写oc工程中引入swift类。

        demo地址: 

      

         2.1  如何在OC类中使用swift类


           2.1.1   新建一个基于OC语言的工程 ,取名 OcOrSwiftTwo
           2.1. 2  实现的功能为 : 从oc类 viewcontroller中, push 至 swift语言 SecondViewController  ,然后SecondViewController可以通过代理或者swift闭包把值传回viewcontroller. 
           2.1.3   当前文件目录看下图:  (第四个箭头: 桥接文件)
            
      
        2.2   如何在OC中实现swift的代理与闭包Block方法
                
        2.2.1 如何在oc中引入swift类。#import "工程名-swift.h"
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import "OcOrSwiftTwo-swift.h"  
       2.2.2 在secondViewController.swift 中实现代理与闭包,代码如下:
        注意: @objc(代理名)  才能在外部可见这个代理
     
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. import UIKit  
    2. import Foundation  
    3.   
    4. // 必须加上@objc 代理才能在oc类中可见。  
    5. @objc(EditTextFieldDelegate)  
    6. protocol EditTextFieldDelegate:NSObjectProtocol {  
    7.     func editTextField(_ str: String) -> Void  
    8. }  
    9.   
    10. @objc(SecondViewController)  
    11. class SecondViewController: UIViewController {  
    12.   
    13.     var editorDelegate:EditTextFieldDelegate?  
    14.     var textField:UITextField?  
    15.     var addButton:UIButton?  
    16.     var pushButton:UIButton?  
    17.       
    18.     typealias editorBlock = (_ t:String) -> Void  
    19.     var myEidtorBlock:editorBlock?  
    20.       
    21.     override func viewDidLoad() {  
    22.         super.viewDidLoad()  
    23.         self.view.backgroundColor = UIColor.white  
    24.         textField = UITextField.init(frame: CGRect.init(x: 50, y60, width200, height50))  
    25.         textField?.placeholder = "输入返回首页的内容"  
    26.         self.view.addSubview(textField!)  
    27.           
    28.         addButton = UIButton.init(type: .custom)  
    29.         addButton?.setTitleColor(UIColor.black, for.normal)  
    30.         addButton?.setTitle("pop", for.normal)  
    31.         addButton?.frame = CGRect.init(x: 50, y150, width200, height50)  
    32.         addButton?.layer.borderColor = UIColor.black.cgColor  
    33.         addButton?.layer.borderWidth = 1.0  
    34.         addButton?.addTarget(self, action: #selector(popAction), for.touchUpInside)  
    35.         self.view.addSubview(addButton!)  
    36.           
    37.           
    38.           
    39.         pushButton = UIButton.init(type: .custom)  
    40.         pushButton?.setTitleColor(UIColor.black, for.normal)  
    41.         pushButton?.setTitle("push", for.normal)  
    42.         pushButton?.frame = CGRect.init(x: 50, y250, width200, height50)  
    43.         pushButton?.layer.borderColor = UIColor.black.cgColor  
    44.         pushButton?.layer.borderWidth = 1.0  
    45.         pushButton?.addTarget(self, action: #selector(pushAction), for.touchUpInside)  
    46.         self.view.addSubview(pushButton!)  
    47.           
    48.     }  
    49.       
    50.     func popAction() -> Void {  
    51.           
    52.         if editorDelegate != nil {  
    53.             editorDelegate?.editTextField((textField?.text)!)  
    54.         }  
    55.           
    56.         if ((self.myEidtorBlock) != nil){  
    57.             self.myEidtorBlock!((textField?.text!)!)  
    58.         }  
    59.           
    60.         self.navigationController?.popViewController(animated: true)  
    61.     }  
    62.       
    63.       
    64.     func pushAction() -> Void {  
    65.         let three = ThreeViewController.init()  
    66.         self.navigationController?.pushViewController(three, animatedtrue)  
    67.           
    68.     }       
        2.2.3   在oc类中viewcontroller.m 文件中实现SecondviewController.swift的相关代理与闭包(block). 代码如下:
       
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import "ViewController.h"  
    2. #import "OcOrSwiftTwo-swift.h"  
    3.   
    4. @interface ViewController ()<EditTextFieldDelegate>  
    5. @property (nonatomicstrongUITextField *showTextField;  
    6. @property (nonatomicstrongUIButton *pushButton;  
    7.   
    8. @end  
    9.   
    10. @implementation ViewController  
    11.   
    12. - (void)viewDidLoad {  
    13.     [super viewDidLoad];  
    14.     _showTextField = [[UITextField alloc]initWithFrame:CGRectMake(50100 , 20050)];  
    15.     _showTextField.placeholder = @"swift传回的文本内容";  
    16.     _showTextField.adjustsFontSizeToFitWidth = YES;  
    17.     _showTextField.enabled = NO;  
    18.     [self.view addSubview:_showTextField];  
    19.       
    20.     _pushButton = [UIButton buttonWithType:UIButtonTypeCustom];  
    21.     [_pushButton.layer setBorderColor:[UIColor blackColor].CGColor];  
    22.     [_pushButton.layer setBorderWidth:1.0];  
    23.     [_pushButton setFrame:CGRectMake(5020020050)];  
    24.     [_pushButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  
    25.     [_pushButton setTitle:@"push" forState:UIControlStateNormal];  
    26.     [_pushButton addTarget:self action:@selector(pushAction) forControlEvents:UIControlEventTouchUpInside];  
    27.       
    28.     [self.view addSubview:_pushButton];  
    29. }  
    30.   
    31.   
    32.   
    33.   
    34. -(void)pushAction{  
    35.     SecondViewController *second = [[SecondViewController alloc]init];  
    36.     // second.editorDelegate = self;  
    37.       
    38.     /* 
    39.       swift中的闭包回滴 
    40.      */  
    41.     second.myEidtorBlock = ^(NSString *str) {  
    42.         _showTextField.text = [NSString stringWithFormat:@"second传回信息: %@",str];  
    43.     };  
    44.     [self.navigationController pushViewController:second animated:YES];  
    45. }  
    46.   
    47. #pragma mark swift中的代理  
    48. -(void)editTextField:(NSString *)str{  
    49.     _showTextField.text = [NSString stringWithFormat:@"second传回信息: %@",str];  
    50. }  
    51.   
    52. - (void)didReceiveMemoryWarning {  
    53.     [super didReceiveMemoryWarning];  
    54.     // Dispose of any resources that can be recreated.  
    55. }  

    展开全文
  • ...在OC中使用Swift 1.首先创建一个工程名字就叫做CHWTest1 2.在工程的Build Setting中把Defines Module改为YES,如图 3.把Product Name设为工程的名字,如图 4

    转自:http://m.blog.csdn.net/article/details?id=47100535



    一.在OC中使用Swift

    1.首先创建一个工程名字就叫做CHWTest1

    2.在工程的Build Setting中把Defines Module改为YES,如图


    3.把Product Name设为工程的名字,如图


    4.在你的OC文件中导入ProjectName-Swift.h(这个 ProjectName-Swift.h是系统自动创建的,不要手动去创建,ProjectName是你的工程得名字,这里就是CHWTest1


    这时候编译会报错,因为并没有Swift文件

    5.创建Swift文件


    这里创建一个Swift的类,语言选择为Swift,然后会提示你,是不是创建一个OC的桥接头文件,这里选择YES,创建完之后,你的工程里是这样的

    是的,你会发现你的工程中多了个 PrductName-Bridging-Header.h的一个文件,这个的作用就是OC和Swift的桥接,里面有这样一句话

     Use this file to import your target's public headers that you would like to expose to Swift.意思就是,在这里面你个以导入类,以供你的Swift使用,这里面我的例子是OC-Swift-OC三个类之间的push,具体代码如下




    然后push的效果就出来了,如图


    OK,到这里,OC中使用Swift就已经结束,不难吧!

    二,如何在Swift中使用OC

    Swift中使用OC文件和上面差不多,只是需要几步

    1.创建一个Swift工程,这里面就叫做CHWTest2

    2.Swift代码引用OC,需依靠 Objective-C bridging header 将相关文件暴露给Swift,创建 Objective-C bridging header 有两种方法:

    (1)当你在Swift项目中尝试创建OC文件时,系统会自动帮你创建 Objective-C bridging header,如下




    此时除了 .h 、.m 文件之外,会额外多出一个叫做 项目工程名-Bridging-Header.h 的文件,这个文件中导入的类是可以暴露给Swift看到的。你要做的,只是#import XXXX.


    这个步骤和上面是差不多的,另外一种方式就是

    (2)自己创建 Objective-C-bridging-header这个桥接文件

    File > New > File > (iOS or OS X) > Source > Header File切记,名字 一定要 是 项目工程名-Bridging-Header.然后还有一步,在项目的 Build Settings选项里,要确保Swift Compiler 选项里有这个 Bridging Header 文件的设置,路径必须指向文件本身,而不是目录!


    这里,Swift中就可以使用OC文件了!


    展开全文
  • 碰到一个swift的项目,博主要用OC来进行重构,但是考虑到时间的问题,里面几大功能模块打算直接抑制到项目里,这里要考虑SwiftOC之间界面的互相跳转,也是混编。 Swift中使用OC使用桥接文件,可以查看...

    碰到一个swift的项目,博主要用OC来进行重构,但是考虑到时间的问题,里面几大功能模块打算直接抑制到项目里,这里要考虑Swift和OC之间界面的互相跳转,也是混编。
    Swift中使用OC使用桥接文件,可以查看http://blog.csdn.net/codingfire/article/details/51880516

    在OC中使用Swift文件博主还真不知道,查了下,具体说明如下:

    假设我有一个类:ViewController.swift
    我要使用这个类里面的方法,或者饮用类名跳转,
    需要在OC类中引入头文件:#import "工程名-Swift.h",就是工程名加上“-Swift.h”.
    

    混编之后即可按照OC的用法来使用了。
    查看细节可下载Demo:点击下载

    展开全文
  • iOS 马甲包制作+垃圾OCSwift代码生成脚本 文章目录iOS 马甲包制作+垃圾OCSwift代码生成脚本一、马甲包介绍1、什么是马甲包3、怎么制作马甲包二、OC垃圾代码生成脚本三、Swift垃圾代码生成脚本 一、马甲包介绍 ...

    一、马甲包介绍

    1、什么是马甲包

    马甲包是利用APP Store规则漏洞,通过开发人员的技术手段,在多个地区平台上架同一产品。马甲包和主包内容功能是一样的。

    2、为什么要制作马甲包

    不同的产品定位,不同的产品需要,会需要一套代码上架多个产品。

    1. 产品定位不一样,马甲包用来做一些导量、刷分。
    2. 抗风险。先用马甲包测试新功能,看看市场反应,好的话再在主包上迭代。
    3. 需要上架到不同国家地区应用市场。

    3、怎么制作马甲包

    UI部分:

    1. icon和启动图替换
    2. 代码里面文案修改

    代码部分:

    1. 修改工程名字
    2. 修改图片资源,改变图片的hash值,不要让检测到以前被拒的资源
    3. 修改类名
    4. 修改方法名
    5. 打乱方法顺序
    6. 添加混淆代码、垃圾代码

    打包提审:

    1. 建议换一个开发者账号去提交,并且换一个ip
    2. 更换一台新电脑打包
    3. 项目描述、项目宣传不能和之前的一样
    4. 测试账号不能和之前一样
    5. 一个账号只提交一个包,一台电脑不能提交超过23个包

    二、OC垃圾代码生成脚本

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    #第一步:首先生成一个500位的数组 驼峰类型的元素 用作文件名 eg:AsdfdfGsd
    import random
    import os,sys
    import string
    
    first = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    second = "abcdefghijklmnopqrstuvwxyz"
    number = "345"
    index = 0
    array = []
    for i in range(500):
        final=(random.choice(first))
        index = random.randint(3, 5)
        for i in range(index):
            final+=(random.choice(second))
        final += (random.choice(first))
        for i in range(index):
            final+=(random.choice(second))
        array.append(final)
    
    
    print (array)
    
    #第二步:
    #用上边生成的数组来创建对应的.h和.m文件
    # -*- coding: utf-8 -*-
    import random
    import os
    import string
    #创建.h文件
    def text_createH(fileNmae,msg,msg1,propertyNumber,methodArray,msg3):
        full_path = sys.path[0] + '/OCFiles/' + fileNmae + '.h'
        file = open(full_path, 'w')
        file.write('//\n//  '+fileNmae+'.h\n//  SajiaoShopping\n\n//  Created by 某 波 bo on 15/10/23.\n//  Copyright ©  2017年 阿里郎. All rights reserved.\n//\n\n')
        file.write(msg)
        file.write(msg1)
        propryNameArray = []
        for index in range(1,propertyNumber):
            propryNameArray.append(random.choice(array))
        propryNameArray = list(set(propryNameArray))
        for propertyName in propryNameArray:
            file.write('@property(nonatomic,strong)'+random.choice(classArray)+' * '+propertyName+';\n')
        file.write('\n\n')
        for methodName in methodArray:
            file.write('- (void)pushTo'+methodName+'VC:(NSDictionary *)info;\n')
        file.write(msg3)
        file.close()
        print('Done')
    #创建.m文件
    def text_createM(fileNmae,msg,msg1,methodArray,msg3):
        full_path = sys.path[0] + '/OCFiles/' + fileNmae + '.m'
        file = open(full_path, 'w')
        file.write('//\n//  '+fileNmae+'.m\n//  SajiaoShopping\n\n//  Created by 某 波 bo on 15/10/23.\n//  Copyright ©  2017年 阿里郎. All rights reserved.\n//\n\n')
        file.write(msg)
        file.write(msg1)
        for methodName in methodArray:
            file.write('- (void)pushTo'+methodName+'VC:(NSDictionary *)info\n{\n\n  NSMutableArray *array = [NSMutableArray array];\n')
            number = random.randint(3, 10)
            for i in range(1,number):
                file.write('  [array addObject:@"'+random.choice(array)+'"];\n')
            file.write('\n}\n\n')
        file.write(msg3)
        file.close()
        print('Done')
    
    classArray = ['NSString','UILabel','NSDictionary','NSData','UIScrollView','UIView']
    array = ['HwxrFvrj', 'QnzduQbtdd', 'PvcrwLtqhf', 'UvdhDbjn', 'SuntmyTxvyzg', 'CvlxwBipbp', 'GzrdyzIbimvz', 'CqsjqMmgsp', 'OxaaeuWjhasc', 'NjiardRvwgbi', 'NcculmLtpljq', 'ApoqQrll', 'GkgokDyvjb', 'EblldkVouplj', 'KfdrFvnw', 'SfhyhObftc', 'SmruByoc', 'YzcccvXmpmit', 'OmqvaHpxat', 'XzytsUyvyd', 'MjforNnnyi', 'ZvjhuIdogs', 'BzfrxzSeahxc', 'PycycwFjtpny', 'XvngtoSedljr', 'DktiaCbucd', 'AqbplNuodc', 'MzkvgZuala', 'KdwzIoej', 'AaynatUpqcfd', 'IyvwhZvtjc', 'UmijGmsy', 'AoayndXxghym']
    array = list(set(array))
    
    for name in array:
        number = random.randint(3, 10)
        methodArray = []
        for i in range(1,5):
            methodArray.append(random.choice(array))
        methodArray = list(set(methodArray))#数组去重
        text_createH(name+'ViewController', '#import <UIKit/UIKit.h>\n','@interface '+name+ 'ViewController:'+ 'UIViewController\n\n',number,methodArray,'\n\n@end')
        text_createM(name+'ViewController', '#import "'+name+'ViewController.h"\n\n' '@interface '+ name+'ViewController()\n\n @end\n\n','@implementation '+name+'ViewController\n\n- (void)viewDidLoad { \n\n [super viewDidLoad];\n\n}\n\n',methodArray,'\n\n@end')
    
    

    三、Swift垃圾代码生成脚本

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    
    
    import random
    
    import os,sys
    
    import string
    
    #创建.swift文件
    
    def createSwift(fileNmae,propertyNumber,methodArray):
    
        full_path =  sys.path[0] + '/SwiftFiles/' + fileNmae + '.swift'
    
        file = open(full_path, 'w')
    
        file.write('//\n//  '+fileNmae+'.swift\n//  LinkMall\n\n//  Created by Meng on 2018/9/17.\n//  Copyright © 2018年 OneThing Ltd. All rights reserved.\n//\n\n')
    
        file.write('import UIKit \n\n' + 'class '+fileNmae+': UIViewController {\n\n')
        
        propryNameArray = []
    
        for index in range(1,propertyNumber):
    
            propryNameArray.append(random.choice(array))
    
        propryNameArray = list(set(propryNameArray))
    
        for propertyName in propryNameArray:
    
            file.write('    public var '+propertyName+':'+random.choice(classArray)+'!\n')
    
        file.write('\n\n')
        
        file.write('    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n')
       
    
        for methodName in methodArray:
    
            file.write('    public func '+methodName+'TOVC() {\n\n       var realArr = Array<String>()\n')
    
            number = random.randint(10, 15)
    
            for i in range(1,number):
    
                file.write('       realArr.append("'+random.choice(array)+'")\n')
    
            file.write('\n    }\n\n')
    
        file.write('}')
    
        file.close()
    
        print('Done')
    
    
    def createClassName():
        
        first = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
        second = "abcdefghijklmnopqrstuvwxyz"
    
        index = 0
    
        array = []
    
        # 设置生成多少个类
        classNumber = 100
        for i in range(classNumber):
    
            final=(random.choice(first))
            #字符串长度
            index = random.randint(10, 15)
    
            for i in range(index):
    
                final+=(random.choice(second))
    
            final += (random.choice(first))
    
            for i in range(index):
    
                final+=(random.choice(second))
    
            array.append(final)
        return array
    
    #属性类型
    classArray = ['UIColor','UILabel','UITableView','UISlider','UIScrollView','UIView','UIButton']
    
    array = createClassName()
    
    array = list(set(array))
    
    for name in array:
    
        number = random.randint(10, 15)
    
        methodArray = []
    
        for i in range(50,100):
    
            methodArray.append(random.choice(array))
    
        methodArray = list(set(methodArray))#数组去重
        
        createSwift(name+'VController',number,methodArray)
    
    
    
    展开全文
  • Swift - OC Tips

    2018-11-14 11:33:07
    最近在尝试ocswift的混编,一是:swift是大势所趋,终究是要学习的。二是:项目目前架构是oc架构,全部重构为swift也不现实。下面是混编中遇到的一些问题和总结: 1.在oc项目中第一次创建swift文件的时候,会...
  • 之前用OC代码写过PUSH和POP的转场动画,闲来无事,将其转换成Swift语言,希望对大家有帮助,转载请注明。。。。如何实现PUSH和POP的转场动画?首先,创建一个NSObject的类,分别用来实现PUSH和POP的动画效果创建PUSH...
  • 目的:两VC通过闭包传值 ...FirstVC.swift里: import UIKit class FirstVC: UIViewController {  @IBOutlet weak var output: UILabel!  @IBOutlet weak var ig: UIImageView!  o
  • JS和OC/Swift相互调用,主要总结了JS和OC交互的三种方式:1.使用UIWebView,利用JavaScriptCore实现2.使用WKWebView,利用WKScriptMessageHandler实现3.使用第三方框架WebViewJavascriptBridge实现案例地址:...
  • MBProgressHUD.h #import #import "MBProgressHUD.h" #define SNS_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) typedef enum _tagShowType{    EST_NORMAL=0,
  • func pushClick() ... print(“push Click”) // 进入下个视图控制器 let nextVC = PopViewController2() // self.navigationController!.pushViewController(nextVC, animated: true) // 转场动画2
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • Swift之枚举、结构体&泛型
  • 背景:在OC文件中,pushswift写的控制器,需要设置如下 1,swift是采用moudle模式,勾选允许 2,设置桥接文件,新建一个.h的桥接文件 3,设置swift语言版本 4,在需要使用swift文件的地方,引入头文件:...
  • 多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OCSwift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File选择Header File创建 指定桥接文件 project-&...
1 2 3 4 5 ... 20
收藏数 1,476
精华内容 590
热门标签
关键字:

oc push swift