我正在Swift中构建一个iOS应用程序,并利用Apple提供的Lister示例项目.
Lister使用两个模型对象:List和ListItem.我发现super.init()即使它们是NSObject的子类,它们都不会调用它们的初始化器.
但是,在Lister的Objective-C版本中,两个模型对象(AAPLList和AAPLListItem)都会调用[super init].
在斯威夫特编程语言中明确指出,"指定的初始化程序必须调用从他们的直接超类的指定初始化方法."(初始化程序链接在初始化的第1条)
这里发生了什么?为什么这是一个例外,如果你不应该总是在子类中调用super.init(),那么适用哪些规则?
我有一组测试用例,所有测试用例应完全相同,方法是"方法x是否返回现有文件的名称?"
我认为最好的方法是从TestCase派生的基类,它们都共享,并简单地将测试添加到该类.不幸的是,测试框架仍然试图为基类运行测试,它没有意义.
class SharedTest(TestCase):
def x(self):
...do test...
class OneTestCase(SharedTest):
...my tests are performed, and 'SharedTest.x()'...
Run Code Online (Sandbox Code Playgroud)
我试图破解检查只是跳过测试,如果它被调用基类的对象而不是像这样的派生类:
class SharedTest(TestCase):
def x(self):
if type(self) != type(SharedTest()):
...do test...
else:
pass
Run Code Online (Sandbox Code Playgroud)
但得到了这个错误:
ValueError: no such test method in <class 'tests.SharedTest'>: runTest
Run Code Online (Sandbox Code Playgroud)
首先,我想要做任何优雅的建议.其次,虽然我真的不想使用type()hack,但我想理解为什么它不起作用.
我是C++新手,我有很多关于OO语言的经验,比如C/C#/ Objective-C.现在,我正在学习C++.
我看到了这个C++代码:
class World : public State
{
};
Run Code Online (Sandbox Code Playgroud)
似乎World类State公开继承了这个类.公共子类化?这很难理解.
这个功能的概念是什么?什么时候有用或需要?
我是java新手,我正在尝试创建一个XML文档并一遍又一遍地克隆该文档的特定节点(减去textnode).有人回答我并说我应该继承节点并覆盖克隆.所以我的问题是什么是子类?
我目前正在建设一个选项卡式iPhone应用程序,其中每个选项卡的视图控制器是一个实例UINavigationController,并且其中每一个的每个子控制器UINavigationController实例是一个实例UITableViewController.理想情况下,我想子类化,UINavigationController以便每个选项卡的控制器是UINavigationController的子类(UINavigationController显然,除了具有所有标准功能外)还充当与其子控制器关联的每个表视图的数据源和委托. .试图这样做似乎打破UINavigationController了子类中的基本功能.
看到苹果公司在他们的iPhone文档中说一个人不应该是子类UINavigationController,而且当一个人做的时候事情似乎就会破裂,我想知道如何在UINavigationController's不进行子类化的情况下扩展功能,一般来说,如何解决子类化限制时的问题.做可可开发.
谢谢!
我试图实现一个NSMutableDictionary的子类,它返回nil而不是在字典中不存在键时抛出NSUndefinedKeyException.
但是,当我尝试将对象添加到我的字典中时,我得到了
[NSMutableDictionary setObject:forKey:]: method only defined for abstract class
Run Code Online (Sandbox Code Playgroud)
NilDictionary.h
@interface NilDictionary : NSMutableDictionary {
}
@end
Run Code Online (Sandbox Code Playgroud)
NilDctionary.m
@implementation NilDictionary
- (id)valueForUndefinedKey:(NSString *)key {
return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)
我是否真的必须在我的子类中再次实现NSMutableDictionary中的所有方法,或者是否有其他类我应该进行子类化?
澄清:我原来的问题归结为我无法正确阅读文档.
如果你需要子类NSMutableDictionary,请检查正确的答案.如果你想要一个在你的密钥不存在时返回nil的字典,NSMutableDictionary已经这样做了.
我有一个问题子类MKPolygon.
我想添加一个简单的int tag属性,但我不断获取MKPolygon的实例而不是我的自定义类,因此调用setTag:会导致异常.
问题是MKPolygons是使用类方法创建的:polygonWithCoordinates: count:我不知道如何将其转换为我的类的实例(包括标记属性).
您如何向MKPolygon添加标签属性?
谢谢!
我的库有两个类,一个基类和一个派生类.在库的当前版本中,基类具有虚函数foo(),派生类不会覆盖它.在下一个版本中,我希望派生类可以覆盖它.这会破坏ABI吗?我知道引入一个新的虚函数通常会,但这似乎是一个特例.我的直觉是它应该改变vtbl中的偏移量,而不是实际改变表的大小.
显然,由于C++标准没有强制要求特定的ABI,这个问题在某种程度上是特定于平台的,但实际上,在大多数编译器中,断开和维护ABI是类似的.我对GCC的行为感兴趣,但是人们可以回答的编译器越多,这个问题就越有用;)
c++ virtual-functions backwards-compatibility abi subclassing
我正在尝试创建一个非常有用的列表collections.defaultdict.以下设计很好地工作:
class defaultlist(list):
def __init__(self, fx):
self._fx = fx
def __setitem__(self, index, value):
while len(self) <= index:
self.append(self._fx())
list.__setitem__(self, index, value)
Run Code Online (Sandbox Code Playgroud)
以下是您使用它的方式:
>>> dl = defaultlist(lambda:'A')
>>> dl[2]='B'
>>> dl[4]='C'
>>> dl
['A', 'A', 'B', 'A', 'C']
Run Code Online (Sandbox Code Playgroud)
我应该将什么添加到默认列表以支持以下行为?
>>> dl = defaultlist(dict)
>>> dl[2]['a'] = 1
>>> dl
[{}, {}, {'a':1}]
Run Code Online (Sandbox Code Playgroud) 我想创建一个可重用的视图控制器UsersViewControllerBase.
UsersViewControllerBaseextends UIViewController,并实现两个委托(UITableViewDelegate,UITableViewDataSource),并有两个视图(UITableView,UISegmentedControl)
目标是继承实现UsersViewControllerBase并在UsersViewController类中自定义分段控件的分段项.
class UsersViewControllerBase: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UITableView!
//implementation of delegates
}
class UsersViewController: UsersViewControllerBase {
}
Run Code Online (Sandbox Code Playgroud)
的UsersViewControllerBase存在于故事板和所有出口连接,被指定的标识符.
问题是我如何初始化UsersViewController以继承所有的视图和功能 UsersViewControllerBase
当我创建UsersViewControllerBase一切工作的实例时
let usersViewControllerBase = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewControllerBase") as? UsersViewControllerBase
Run Code Online (Sandbox Code Playgroud)
但是当我创建UsersViewController我获得插件的实例时nil(我创建了一个简单的UIViewController并在故事板中为其分配了UsersViewController类)
let usersViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewController") as? UsersViewController
Run Code Online (Sandbox Code Playgroud)
看起来不会继承视图.
我希望init方法UsersViewControllerBase …
subclassing ×10
ios ×3
iphone ×3
c++ ×2
inheritance ×2
objective-c ×2
python ×2
subclass ×2
swift ×2
abi ×1
clone ×1
cocoa-touch ×1
django ×1
ipad ×1
java ×1
list ×1
nsobject ×1
uikit ×1
unit-testing ×1
view ×1
xml ×1