下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习...在Objective-C中的集合类中主要包括不可变的数组--NSArray, 可变的数组--NSMutableArray, 不可变的字典--NSDictionary, 可变的字典--NSMutableDictionary...,必须先把数据类型转换成对象,然后再存入集合类中。...NSArray也是OC中的一个对象,使用NSArray也需要进行实例化,前面的博客在类的初始化中提到了便利初始化函数和便利构造器,在NSArray中也少不了这两样东西我们可以通过NSArray的便利初始化函数或者便利构造器进行...在OC中给我们提供啦一个类专门来把基本数据类型封装成对象,这个类就是NSNumber. 1.
Objective-C中NSArray类的解读 NSArray数组类是Objective-C语言中常用的也是重要的一个类,除了开发中常用到的一些基础功能,NSArray及其相关类中还封装了许多更加强大的功能...:(NSUInteger)index; //初始化方法 - (instancetype)init; //通过C语言风格的数组创建NSArray对象 需要注意,C数组中需要为Objective对象,cnt...nullable ObjectType)firstObjectCommonWithArray:(NSArray *)otherArray; //将数组中一定范围的元素读取到一个C数组中...opts usingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0); //在一个下标集合中枚举...passingTest:(BOOL (^)(ObjectType obj, NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0); //同上 在一定下标集合中遍历
在学习iOS App开发中遇到需要计算时间差并格式化输出的需求,没有现成的方法,需要结合NSCalendar和NSDateComponents来实现。...我是把代码封装到自己的一个工具类KRUtils里作为类方法,使用起来也很方便。
接触面向对象也有一段时间了,当时是通过C++学习的OOP,后来又接触到了PHP和Java。...简单的说来,便利构造器是为了简化对象的初始化而生的,在之前的博客中也说了一嘴:编程是间接的过程,其实使用便利构造器就是间接的过程。在程序中处处都用到了间接。...而便利构造器是类方法,返回的是对象,在便利构造器中做了两件事:一个是给对象分配空间,第二个是调用便利初始化函数进行数据的初始化。...在OC中类是由接口(interface)和实现(implementation)两部分构成的。在OC中类是通过两个单独的文件定义。....在面向对象中父类可以声明子类的变量 3.
引: 很多人知道可以用Category给已有的类添加一些新方法,但是不同于swift中的extension,Objective-C中的Category(类别)是不支持直接添加属性的,那如果就是需要添加新的属性怎么办呢...,在使用的时候,只需要import你创建的Category,在使用的时候还是使用原来的类,但是你会惊奇的发现他支持你自己在Category中添加的方法。...在工程中按住command+N来添加新文件,选择Objectiv-C File: 在出来的界面中的File Type选择Category,就是创建类别文件了,File填写我们要加在类别尾巴上的名字,Class...浅析,这里只讲怎么用来添加属性,我们在setter方法里关联一个对象,在getter方法里获取对应key关联的对象,就可以啦,代码如下,很简单: //UINavigationController+Cloudox.h...*nav = [[UINavigationController alloc] initWithRootViewController:vc]; self.window.rootViewController
为App初始化一个默认UIWindow对象 在AppDelegate.m中需要初始化一个window属性,作为后面往App添加视图的容器 1....UINavigationController对象的rootViewController为UIViewController对象。...如果想显示一个UIWindow,同时设置为keyWindow,并将其显示在同一windowLevel的其它任何UIWindow之上 - (void)makeKeyAndVisible PS: 上述方法真的会将其显示在同一...UIWindowLevelAlert; UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar __TVOS_PROHIBITED; 例如,在手势相关类中调整自定义的...>> ) 此时,断点在手势相关类中,也可专门查看AppDelegate.m中的window属性:假设UIWindow *delegateWindow = [[[UIApplication sharedApplication
属性“__attribute__”在Objective-C中的应用 关于__attribute__,你可能用的不多,但是一定经常见到,在系统的Foundation框架中,__attribute...8. objc_requires_super 这个属性用来修饰Objective-C中父类的方法,如果子类进行了重写,在重写的方法中没有调用父类方法,则会进行编译器提示。...在实际编程中,很多时候,都是由于子类重写了父类的方法造成不可预知的问题,通过使用这个属性可以有效的对开发者进行提示,例如: ?...10. overloadable 在C语言中,对于相同的函数名,哪怕参数不同,也不能够重复定义。...11. objc_runtime_name 这是一个很有趣的属性,其可以运行时改变Objective-C类的类名,但是不会影响其行为。
在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController...,或者在最顶层的ViewController上present另一个ViewController,或者进行其他操作。...在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过...*)rootVC visibleViewController]]; } else { // 根视图为非导航类 currentVC = rootVC;...[UIApplication sharedApplication].keyWindow.rootViewController获取到的是项目的根视图,结合可能用到UITabBarController或者UINavigationController
一、创建自定义的3D Touch菜单 在AppDelegate的didFinishLaunchingWithOptions中,我们添加下列代码,来实现按钮的添加。...UINavigationController let rootViewController = rootNavigationViewController?....UINavigationController let rootViewController = rootNavigationViewController?....UINavigationController let rootViewController = rootNavigationViewController?....UINavigationController let rootViewController = rootNavigationViewController?.
设置必要的权限 在Info.plist的dict节点下添加以下配置 主要配置了http请求允许和所需权限的申请提示 NSAppTransportSecurity <key...; //设置背景色(不透明时没用,因为barTintColor在backgroundColor的上一层) appear.backgroundColor = ZJColor.mainColor...(rootViewController: mainController) self.window?....rootViewController = mainNavi return true } 手动添加Bridge Header 在项目的根目录添加一个头文件 假如就叫做 Bridge-Header.h...打开项目配置 -> Build Settings 搜索 swift 找到Objective-C Bridging Header 设置值为$(SWIFT_MODULE_NAME)/Bridge-Header.h
概要 很多APP为了用户使用方便都加入了自动登录 假设APP的第一个页面是登陆页面,登录后进入主页、 第一种自动登录方法 只在登录页面进行判断,如果用户是自动登录,那么再跳转到主页面,这种方法实现起来相对简单...,但是每次登录都要显示登录页面,不人性化 另一种方法 根据保存的值判断是否自动登录,直接设置软件的第一个页面 代码如下 func application(application: UIApplication...MainViewController; let navi = UINavigationController(rootViewController: mainViewController)...rootViewController = loginViewController; } } 如上述例子所示 登陆页面是不受UINavigationController管理,而主页面是受UINavigationController...管理的,只需要在didFinishLaunchingWithOptions方法中设置rootViewController对应的Controller就行了
在很多的应用中,基本都是使用Tab方式进行模块间的切换。...在Android中很多控件可以实现这类效果,TabLayout、TabHost… 而在iOS中系统为我们提供了UITabBarController类来实现Tab页面之间的切换。...有几个页面我们就创建几个UINavigationController,然后通过tabbar.viewControllers = @[navi1, navi2, navi3…]; 设置给UITabBarController...在进行Tab切换的设计思想上Android和iOS是一致的,就是通过控件去管理页面,所以有几个Tab,我们就要创建几个View实例。 项目实例 ?...tabbar的子控制器,然后通过self.window.rootViewController = tabbar; 将tabbar赋值给根视图控制器。
D 控制器A被称为控制器B、C、D的“父控制器” 控制器B、C、D的被称为控制器A的“子控制器” 为了便于管理控制器,iOS提供了2个比较特殊的控制器: UINavigationController...时, 可以通过initWithRootViewController:方法传入一个控制器作为根控制器 这个根控制器永远处于栈底(如果栈中只有一个对象,那么根控制器也处于栈顶) 设置UIWindow的rootViewController..._window.rootViewController = nav; // 让当前窗口成为主窗口并显示 [_window makeKeyAndVisible];...UITabBarButton在UITabBar中得位置是均分的,UITabBar的高度为49。 UITabBar的结构⼤大致如下图所示: ?...:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是导航控制器的根视图控制器也就是第一个添加到导航控制器上的视图
1、问题背景在Python中,可以为对象设置一个父类,从而实现继承。但是,如果想要在实例化对象时动态地指定父类,则会出现问题。...例如,以下代码试图在实例化Circle对象时,将它的父类设置为Red或Blue:class Red(object): def x(self): print('#F00')class...(parent=Blue)blue_square = Square(parent=Blue)但是,这段代码会报错,因为在Python中,对象的父类只能在类定义时指定,不能在实例化对象时动态设置。...第一个解决方案是使用类工厂。类工厂是一个函数,它可以动态地创建类。在类工厂中,可以根据传入的参数来决定创建哪个类。...依赖注入是一种设计模式,它可以将对象的依赖关系从对象本身中解耦出来。这样,就可以在实例化对象时动态地注入它的依赖关系。
第 3 步:将 Objective-C 导入 Swift由于 ComPDFKit PDF SDK for iOS 是基于 Objective-C 开发的,因此它与 Swift 项目兼容。...这将是您导入任何 Objective-C 代码所需要的唯一的头文件,以便您的 Swift 代码可以访问。...然后,在项目构建设置中找到 Swift Compiler - Code Generation 部分。...将您的桥接头文件的路径添加到 Objective-C Bridging Header 旁边,路径从项目根文件夹开始。...rootViewController = UINavigationController(rootViewController: tPDFViewController) window!.
在上面的代码中,我们可以手动地设置了视图控制器堆栈,稍后会进行详细介绍。...application(_:didDiscardSceneSessions:) : 在分屏中关闭其中一个或多个scene时候回调用,可以在该函数中销毁场景所使用的资源。...Enable Multiple Windows: 默认为NO,其设置为YES可以支持多个窗口。 Application Session Role: 是一个数组,用于在应用程序中声明场景。...但是如果要配置支持多个窗口,则需要将Enable Multiple Windows设置为YES。 AppDelegate类,和上边iOS新建项目AppDelegate一样。...然后设置window的rootViewController,将window实例赋值给场景的window属性,并且设置窗口makeKeyAndVisible为true,即将该窗口置于App的前面。
将类命名为PlayersViewController ,确保它继承于UITableViewController。不要选择“WithXib...”选项,因为我们在故事版中已经为这个类设计了一个UI。...2.3.4 创建数据模型Player类 现在创建Player 类。创建一个新的File,使用 Objective-C class 模板。命名为 Player,继承NSObject。...你只需要提供复用的ID(你曾经在故事版编辑器中为模板cell设置过的,在本例中,即“PlayerCell”)。记得设置这个ID,否则模板cell 不会生效。 ...你可以在属性面板中设置tag。 ...在项目中添加新的 File,使用Objective-C class 模板。类名为PlayerCell ,继承自UITableViewCell。
原来在iOS13中,AppDelegate的文件结构发生了变化: iOS13以前:AppDelegate处理App生命周期和UI生命周期; iOS13以后:处理 App 生命周期和新的 Scene...Session 生命周期,在AppDelegate.h文件中没有了window属性,而是在SceneDelegate中,可见AppDelegate不管理window而是交给SceneDelegate。...*nav = [[UINavigationController alloc]initWithRootViewController:startVC]; self.window.rootViewController...*nav = [[UINavigationController alloc]initWithRootViewController:startVC]; self.window.rootViewController...*nav = [[UINavigationController alloc]initWithRootViewController:startVC]; self.window.rootViewController
Paste_Image.png 一般我们的rootViewController 都是UINavigationcontroller ,所有我们在UINavigationcontroller中设置如下方法...; } 如果rootViewController 都是 tarBarController ,所有我们在tarBarController中设置如下方法 - (BOOL)shouldAutorotate{...我们可以创建一个controller的基类BaseViewController每个controller都继承BaseViewController ,在BaseViewController中重写- (BOOL...)shouldAutorotate 方法中 return NO; 默认关闭,,在需要开启的子类中再次重写- (BOOL)shouldAutorotate 方法,在方法中return YES即可。...之前说的那些都是都是在rootViewController之后去判断的,但是,在程序刚刚启动时做这些判断都是无效的。
UIViewRepresentable中主要有两个方法需要实现: makeUIView:创建View。 updateUIView:根据条件和业务逻辑设置View的状态。...} } struct ContentView : View { var body: some View { Map() } } 案例三 // 定义一个类负责实现代理...updateUIViewController:根据条件和业务逻辑设置UIViewController的状态。...{ let nvc = UINavigationController(rootViewController: vc) return nvc...UIHostingController 在开发 iOS 项目章节已经分析过启动流程,就是通过UIHostingController包装 ContentView,然后赋值给window.rootViewController
领取专属 10元无门槛券
手把手带您无忧上云