首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使Objective C类方法仅对Swift类可见

Objective-C类方法默认是对整个项目可见的,无法直接限制只对Swift类可见。然而,可以通过一些技巧来实现这个目标。

一种方法是使用Objective-C的特性,将类方法声明为私有的。在Objective-C中,可以在类的实现文件(.m文件)中声明私有方法,这些方法只能在该文件中访问。例如,可以在Objective-C类的实现文件中声明一个私有的类方法:

代码语言:txt
复制
@interface MyClass ()
+ (void)privateClassMethod;
@end

@implementation MyClass
+ (void)privateClassMethod {
    // 私有类方法的实现
}

+ (void)publicClassMethod {
    // 公开类方法的实现
}
@end

在上面的例子中,privateClassMethod是一个私有的类方法,只能在MyClass的实现文件中访问。而publicClassMethod是一个公开的类方法,可以在整个项目中访问。

另一种方法是使用Swift的访问控制来限制Objective-C类方法的可见性。可以将Objective-C类方法封装在一个Swift类中,并使用Swift的访问修饰符来限制访问。例如,可以创建一个Swift类,将Objective-C类方法封装在其中,并将类声明为fileprivate,这样只有在同一个文件中的Swift类才能访问这些方法:

代码语言:txt
复制
fileprivate class MySwiftClass {
    @objc class func myObjectiveCClassMethod() {
        // Objective-C类方法的实现
    }
}

在上面的例子中,myObjectiveCClassMethod是一个Objective-C类方法,被封装在一个Swift类中,并使用fileprivate修饰符限制访问。

需要注意的是,这两种方法都只是间接地限制了Objective-C类方法的可见性,并没有直接实现仅对Swift类可见的效果。因为Objective-C类方法本身是对整个项目可见的,无法直接限制只对Swift类可见。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

objective-C 的OOP(上)--定义、继承及方法调用

上一篇展示了如何用传统的“面向过程编程方法”,实现画“矩形”、“圆”、“椭圆”,这一篇看下如何改用OOP的方法来实现: 因为要用到“颜色”以及“矩形区域”二个枚举,先把他们抽出来单独放在CommDef.h...,注意:在obj-C中,定义一个通常分成二部分,一部分是".h"的文件,用来申明有哪些成员(也称为的定义文件,类似于接口),另一部分是".m"的文件,用来提供具体实现 Shape的申明部分如下:...All rights reserved. // #import "Shape.h" //注:因为Circle不需要扩展其它方法,所以这里也只要一个空壳 @interface Circle : Shape...@",bounds.x,bounds.y,bounds.width,bounds.height,[super getColorName:fillColor]); } @end 注:上面展示了在obj-C如何调用父方法...同时我们也看到了,创建一个的实例用“[ new]”来完成。 最后附上文件结构图:

1.2K80
  • objective-C 的OOP(下)-(static)方法、实例方法、overwrite(覆写)、属性(property)

    interface Human : NSObject { BOOL sex; } +(void) toString; -(void) showSex; @end 注:+(void)前的加号,就表示这一个是方法...对应的,还有一个-(void)dealloc方法用来释放资源(类似于析构函数或c#中的dispose()方法)-注:dealloc方法以后在内存管理中详细学习,这里先不管它。...Human //构造函数 -(id) init { NSLog(@"init() in Human is called"); sex = TRUE; return(self); } //static方法...; //调用的“静态”方法 [Human toString]; NSLog(@"----------------"); //创造一个Human的实例 Human *man = [...Woman *wife = [Woman new]; [wife canCook:@"Rice"]; //调用继承自父方法 [wife showSex]; //设置属性 [wife

    73770

    27.Swift学习之与OC混编

    Apple给我们做好了“桥接”工作,但是在Objective-C的项目中调用Swift与在Swift项目中调用Objective-C,处理的方式是不一样的,下面来进行一个简单的介绍。...一、Objective-C的项目中调用Swift 新建一个Objective-C的iOS项目 创建一个Swift,继承自NSObject,这时候会有如下的提示,此时选择Create Bridging...混合项目提示信息.png 这短话的大意:添加这个文件会创建一个Objective-CSwift的混合项目,你是否希望Xcode自动配置一个桥接头文件来让两种语言的文件相互可见?...Swift文件如下: class Person: NSObject { } 在Objective-C中导入头文件,注意此时导入的头文件是一个命名为项目名-Swift.h的头文件,而不是Bridging...项目中调用Objective-C 新建一个Swift的iOS项目 创建一个Objective-C,此时也会有如一中的文字提示,修改文件如下: @interface Person : NSObject

    1.2K10

    C#中泛型和扩展方法如何使用案例分享

    以下的代码在项目中随处可见:1static void Main(string[] args){    var strs = new List {"hello","world"};    ...对实例变量strs采用Where方法,我们发现Where也足够”聪明”,因为它是针对IEnumerable集合类型的扩展方法。.NET内部到底是如何实现的呢?不妨临摹一下~~创建一个类型泛型。...现在想对泛型实例cuteInt和cuteStr的属性GetCute使用扩展方法如何做呢?...cuteInt的属性GetCute是int类型,cuteStr的属性GetCute是string类型,两者的共同基是object,那就针对object类型写一个扩展方法。...如果针对不同类型实例的操作逻辑是一样的,就可以针对不同实例类型的共同父或接口写一个扩展方法

    1.3K00

    (译)Objective-C 类属性

    翻译自:Objective-C Class Properties 译者:Haley_Wong 由于Swift 3.0 出了太多令人兴奋的新特性,人们很容易忽略 Objective-C中的小改动。...苹果展示Objective-C 很可能是为了提高Swift互操作性(译者注:互操作性主要是指OC代码与Swift代码相互转换),但是仍然很欢迎开发者用Objective-C来完成工作。...为了实验一下,我们来创建一个包含几个类型的简单 Objective-C 。...注意使用 +使我们的getter 方法变成一个方法: + (NSInteger)userCount { return _userCount; } identifier 属性则 getter方法 和...生成的Swift接口 似乎,Objective-C 最近的这些改进只是为了提高与Swift的互操作性。Objective-C中新添加的类型属性对应的是Swift变量的用法。

    1.6K30

    唐巧的iOS技术博客选摘

    本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机。...主要内容包括:与Runtime交互、Runtime术语、消息机制、动态方法解析、消息转发、壮的实例变量(Non Fragile ivars)、Objective-C Associated Objects...《刨根问底ObjectiveC Runtime(1)- Self & Super》:本文通过分析clang重写的Objective-C源码,从而解释Objective-C中的self和super在编译器层面分别是如何处理的...本文章的主题就是 UIAlertController,向大家展示如何替换旧的 alert,以及这些操作方法的高级扩展。...KSHObjcUML:KSHObjcUML 是一个 Objective-C 引用关系图的 Xcode 插件。作者是:@kimsungwhee。

    3.3K60

    Swift的初认识

    20170905095037129.png 总之,虽然还处于过渡时期,但趋势很明朗了,Swift 必然会替代 Objective-C,并且比想象中来得快。现在就应该做好准备了。...假如之前已经掌握了 Objective-C,切换到 Swift 也不难。Swift 中很多概念在 Objective-C 中已经存在。...随着时间推移,Swift 在整个 iOS/Mac 工程中占的代码比例会越来越多,而 Objective-C 作为粘合层还是会存在。 2.Swift的优缺点。...OC 定义一个 class 至少需要 4 行,而 swift 只需要两行。新建的成本大大降低,可以避免因为书写成本高而没有使用的情况,而此时新建通常使代码更加整洁。 2.支持命名空间。...避免了无意间重写父方法。 5.Tuple(元组)。低成本且使用方便的数据集合。它提供了函数多个返回值功能。 6.简洁的闭包写法。

    55430

    SwiftObjective-C混编在有赞移动的实践

    )中导入需要暴露给 Swift 模块的 Objective-C ,即可在 Swift 中访问相应 Objective-C方法 Objective-C 访问 SwiftObjective-C...中导入 ProductName-Swift.h,即可访问 Swift 中暴露给 Objective-C方法 2、利用 cocoapods 包管理工具,进行二/三方库混编 Swift 访问 Objective-C...用 Swift Module 系统,需要用到的 Objective-C 用 import xxx 进行引用,即可在 Swift 中访问相应的 Objective-C方法 Objective-C...访问 SwiftObjective-C 中导入 ProductName-Swift.h,即可访问 Swift 中暴露给 Objective-C方法 由于我们目前的业务比如商品模块、消息模块...Swift Swift 中将需要暴露给 Objective-C 模块引用的,用 public 申明 Swift 中需要暴露给 Objective-C方法要用关键字 @objc 在 Objective-C

    2.2K20

    Swift入门:

    重要提示:Swift要求所有非可选属性在初始化方法结束时或在初始化方法内调用任何其他方法时(以先到者为准)都有一个值。 继承 和结构体之间的第二个区别是可以在其他之上构建更大的东西,即继承。...} } 注意它的初始值设定项是如何接受三个参数,然后调用super.init()将name和age传递给Singer超的——但只有在设置了它自己的属性之后。...和Objective-C混合使用 如果你想让苹果操作系统的某个部分调用Swift方法,你需要用一个特殊的属性来标记它:@objc。...这是“Objective-C”的缩写,该属性有效地将该方法标记为可用于运行旧的Objective-C代码——几乎所有的iOS、macOS、watchOS和tvOS。...或者,如果您不想对单个方法使用@objc,您可以将@objcMembers放在之前,以自动将其所有方法提供给Objective-C

    74610

    iOS:关于WWDC2020-Objective-C运行时的改进

    视频中介绍了三个变化: 首先是数据结构的变化, Objective-C 运行时会使用它们来追踪。 其次是 Objective-C 方法列表的变化。...“ro”代表只读,它包括像名词,方法,协议,和实例变量的信息。Swift Objective-C 共享这一数据结构,所以每个 Swift 也有这些数据结构。...例如,所有的都会链接成一个树状结构,这是通过使用 First Subclass,Next Sibling Class 指针实现的,这允许运行时遍历当前使用的所有,这对于使方法缓存无效非常有用。...只有 Swift 会使用 demangled name 字段,并且 Swift 并不需要这一字段,除非有东西访问它们的 Objective-C 名称时才需要。...二、Objective-C方法列表的变化 每一个都附带一个方法列表,当你在上编写新方法时,它就会被添加到列表中。运行时使用这些列表来解析消息发送。 每个方法都包含三个信息。

    49920

    Swift 周报 第二十一期

    这个提议试图在 Swift 6 之前弃用这些可选的入口点属性,从而支持 @main。 SE-0384[3] 导入已声明的 Objective-C 接口和协议 提案正在审查。...该提案主要目的是通过减少对已声明的 Swift API 可见性的负面影响,来提高 Swift 中现有 Objective-C 库的可用性。...希望可以用合成占位符类型来表示 Swift 中已声明的 Objective-C 接口和协议。...Swift论坛 讨论 SE-0384:导入前向声明的 Objective-C 接口和协议[4] 讨论 Swift 6 语言模式的设计优先级[5] Swift 6 重点领域 Swift 语言工作组确定了三个重点领域...58同城iOS包大小治理工具解密[13] 摘要: 本文通过58同城包大小治理的实践经验,来讲解如何解决混编环境下OC/Swift无用、无用资源、重复资源等检测问题,同时结合业内常见的段迁移、链接时优化

    2.1K20

    Swift解读专题一——Swift2.2语言预览

    语言与Objective-C、Java语言的函数特点:         Objective-C实际上并没有函数重载的概念,不同参数的函数实际上拥有不同的函数名,Objective-C的风格将参数名嵌套进函数名中...        Swift中使用class关键字来定义内部可以声明与定义一些属性与方法的实例对象可以通过点语法来调用的属性和方法,示例如下: class MyClass {     var...,可以通过重写init方法来重写的默认构造方法,如果这个有继承的父,则需要遵守如下3条规则: 1.必须先将子类的属性初始化完成。...在Swift中同样也有set和get方法,只是这里的set和get方法Objective-C中的set和get方法有很大的不同,Objective-C中的get和set方法是截获了属性和存取过程,在其中加入额外的其他操作...中的枚举和CObjective-C有很大的差别,在Swift中,枚举也被作为一种数据类型来处理,其中可以添加函数方法

    2.1K20

    ios知识架构

    如何才算掌握或精通ios开发?笔者根据自己多年的ios开发经验,给出一些体会,以便为立志成为ios开发精英的人员快速找到一条学习之路。本文是以最新上市的ios10 为依据的。...一、ios总体知识架构 要全面掌握ios开发技术,需要学习和掌握下列几方面的知识和技巧: 1.开发语言:ObjectiveCSwift。...或The Swift Programming Language (Swift 3) Object-Oriented Programmming With Objective-C Adopting Modern...Objective-C 三、iOS Framework ios技术体系按照官方说法分为下列四层: 图2:ios技术层次结构 这些技术被打包成现成的Framework,供开发者直接调用。...具体各Framework的功能和分类见下表: 表1:iOS Framework 分类和简述 综上所述,ios开发最基础的就是ObjectiveCSwift语言、Foundation和UIKit框架中的基本内容及

    55630

    深入了解 iOS 的初始化

    作者 | Daniels 初始化 在 iOS 里面,无论是 Objective-C 还是 Swift(结构体、枚举)的初始化都有一定的规则要求,只不过在 Objective-C 中会比较宽松,如果不按照规则也不会报错...(结构体、枚举)的次要初始化器,作用是使(结构体、枚举)在初始化时更方便设置相关的属性(成员变量)。...Objective-C Objective-C 在初始化时,会自动给每个属性(成员变量)赋值为 0 或者 nil,没有强制要求额外为每个属性(成员变量)赋值,方便的同时也缺少了代码的安全性。...,在 Objective-C 中,子类会直接继承父所有的初始化方法 SwiftSwift 中,初始化器的规则严格且复杂,目的就是为了使代码更加安全,如果不符合规则,会直接报错,常常会让刚接手 Swift...如果不是可以从多个不同的源初始化,最好只创建一个指定初始化器 • 无论在 Objective-C 还是 Swift 中,都需要在便利初始化器中调用指定初始化器 • 在 Objective-C 中,初始化的时候不需要保证所有属性

    1K10

    一样的iOS开发程序员为什么有人4k有人40k?原因就在这里!

    一,Swift 最终肯定会替代Objective-C? 有一点不容怀疑:Swift 最终肯定会替代 Objective-C,成为主要的 iOS 开发语言。...我们曾经拿猿题库的 App 测试过,采用 Swift 和Objective-C 混合编写的方案后,应用体积会增加 10M,这对于公司来说还是比较大的困扰。...我个人对于 Swift 的预期是:在 1、2 年内能够全面替代 Objective-C。但在近期,我个人还是会使用 Objective-C 来完成公司的项目。 二,iOS 开发者应该如何自我提升?...例如:Objc中的UITableView的dataSouce和delegate;NSDictionary、NSArray相关的增删查改方法;JSON数组转换方法;文件操作方法等。...由此可见,一个初级ios开发者应掌握至少15个框架,一个中级ios开发者应掌握40~50个框架,一个高级ios开发者应掌握50~60个框架(至少包含10个高级框架)。

    82000
    领券