相关疑难解决方法(0)

如何从Swift调用Objective-C代码

在Apple的新Swift语言中,如何调用Objective-C代码?

Apple提到它们可以在一个应用程序中共存,但这是否意味着可以在技术上重用Objective-C中的旧类,同时在Swift中构建新类?

推理

Objective-C是一种独立于平台的语言,而Swift则依赖于平台.因此,在Swift中编写非平台相关代码(业务逻辑库)并不明智.但是,在其中编写与平台相关的代码(例如,与接口相关)将非常好.不是说这是一个好主意,但它肯定是一种兴趣.

objective-c swift

936
推荐指数
13
解决办法
27万
查看次数

Swift 3中的dispatch_once是哪一个?

好的,所以我在Xcode 8中发现了新的Swifty Dispatch API.我很开心使用DispatchQueue.main.async,我一直在浏览DispatchXcode中的模块以找到所有新的API.

但我也用它dispatch_once来确保像单例创建和一次性设置这样的事情不会被多次执行(即使在多线程环境中)......并且dispatch_once在新的Dispatch模块中找不到它?

static var token: dispatch_once_t = 0
func whatDoYouHear() {
    print("All of this has happened before, and all of it will happen again.")
    dispatch_once(&token) {
        print("Except this part.")
    }
}
Run Code Online (Sandbox Code Playgroud)

libdispatch grand-central-dispatch swift swift3

49
推荐指数
5
解决办法
3万
查看次数

Swift 3 - 动态vs @objc

将方法标记为@objc与动态之间的区别是什么,何时执行一个与另一个相比?

以下是Apple对动态的定义.

dynamic将此修饰符应用于可由Objective-C表示的类的任何成员.使用动态修饰符标记成员声明时,始终使用Objective-C运行时动态调度对该成员的访问.编译器从不内联或不虚拟化对该成员的访问.

因为使用Objective-C运行时调度使用dynamic修饰符标记的声明,所以使用objc属性隐式标记它们.

dynamic objective-c ios swift3

37
推荐指数
3
解决办法
8281
查看次数

如何在iOS上调整类方法?

方法调配对于实例方法非常有用.现在,我需要调整一个类方法.知道怎么做吗?

试过这个,但它不起作用:

void SwizzleClassMethod(Class c, SEL orig, SEL new) {

Method origMethod = class_getClassMethod(c, orig);
Method newMethod = class_getClassMethod(c, new);

if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
    class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
    method_exchangeImplementations(origMethod, newMethod);
}
Run Code Online (Sandbox Code Playgroud)

iphone objective-c swizzling ios

31
推荐指数
1
解决办法
2万
查看次数

iOS Swift - 如何以编程方式为所有按钮指定默认操作

我正在开发原型阶段的应用程序.某些界面元素没有通过故事板或以编程方式分配给它们的任何操作.

根据UX准则,我想在应用程序中找到这些"非活动"按钮,并在测试期间点击时显示"功能不可用"警报.这可以通过扩展UIButton来完成吗?

除非通过界面生成器或以编程方式分配其他操作,否则如何为UIButton分配默认操作以显示警报?

user-experience uibutton ios swift

6
推荐指数
1
解决办法
955
查看次数

Objective C 运行时特性是什么?

在我刚刚读到的一篇博客文章中:

'Swift 允许我们从 NSObject 扩展类以获得对象的 Objective-C 运行时功能。它还允许我们使用 @objc 注释 Swift 方法,以允许 Objective-C 运行时使用这些方法。

我不明白 Objective-C 运行时特性这个术语。这是否意味着该代码也可以在 Objective-C 项目中使用?

terminology runtime objective-c nsobject swift

5
推荐指数
1
解决办法
1901
查看次数

如何重写私有方法并迅速调用super?

众所周知,如果您需要快速覆盖基类中的方法,则必须在该方法之前声明“ override”关键字。如果该方法是私有的,您仍然可以迅速“覆盖”它,只需添加NO overlay关键字即可。但是,您不能调用super.MethodName(),这是我的问题。

例如,UINavigationController中有一个私有方法,即“ _startCustomTransition”,我可以在我的自定义MyNavigationController.swift中执行此操作

class MyNavigationController: UINavigationController {
    func _startCustomTransition() {
        // I can not call super._startCustomTransition()
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,我该如何进行超级通话?谢谢。

swift

4
推荐指数
1
解决办法
3403
查看次数