在Objective-C 2.0中,是否可以创建一个参数是可选的方法?也就是说,您可以进行如下方法调用:
[aFraction print];
Run Code Online (Sandbox Code Playgroud)
以及:
[aFraction print: someParameter];
Run Code Online (Sandbox Code Playgroud)
在同一个程序中.
Apple的Objective-C 2.0编程语言指南将Obj-C与Python进行了对比,似乎说这是不允许的.我还在学习,我想确定.如果它是可能的,那么什么是语法,因为我的第二个代码示例不起作用.
更新: 好的,我刚刚制作了两个方法,都命名为"print".
头
-(void) print;
-(void) print: (BOOL) someSetting;
Run Code Online (Sandbox Code Playgroud)
履行
-(void) print {
[self print:0];
}
-(void) print: (BOOL) someSetting {
BOOL sv;
sv = someSetting;
if ( sv ) {
NSLog(@"cool stuff turned on");
}
else {
NSLog(@"cool stuff turned off");
}
}
Run Code Online (Sandbox Code Playgroud)
相关的计划行
...
printParamFlag = TRUE;
// no parameter
[aCodeHolder print];
// single parameter
[aCodeHolder print:printParamFlag];
...
Run Code Online (Sandbox Code Playgroud)
我无法相信这有效.我有什么理由不这样做吗?
我在我的Swift文件中有一个Initializer方法,如下所示:
public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
super.init(frame: frame)
isHidden = true
}
Run Code Online (Sandbox Code Playgroud)
我想从我的Objective-C文件中调用此方法,但在编译时抛出它的错误.
错误:
/ Users/Desktop/old data/ChatScreenViewController.m:396:92:'NVActivityIndicatorView'没有可见的@interface声明选择器'initWithFrame:type:color:padding:'
Obj-C调用代码:
NVActivityIndicatorView *objNVActivityIndicatorView = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) type:NVActivityIndicatorTypeLineScalePulseOut color:[UIColor blueColor] padding:10]
Run Code Online (Sandbox Code Playgroud)
我试过的:
Objective-C在我的快速课程中添加
@objc public final class NVActivityIndicatorView: UIView
Run Code Online (Sandbox Code Playgroud)
仍然无法访问上述方法.
我的Swift文件:NVActivityIndicatorView.swift
任何想法出了什么问题?
提前致谢!