标签: subclassing

在Swift中调用NSObject子类的初始化程序中的super.init()

我正在Swift中构建一个iOS应用程序,并利用Apple提供的Lister示例项目.

Lister使用两个模型对象:List和ListItem.我发现super.init()即使它们是NSObject的子类,它们都不会调用它们的初始化器.

但是,在Lister的Objective-C版本中,两个模型对象(AAPLList和AAPLListItem)都会调用[super init].

斯威夫特编程语言中明确指出,"指定的初始化程序必须调用从他们的直接超类的指定初始化方法."(初始化程序链接在初始化的第1条)

这里发生了什么?为什么这是一个例外,如果你不应该总是在子类中调用super.init(),那么适用哪些规则?

subclass nsobject subclassing ios swift

14
推荐指数
1
解决办法
3649
查看次数

如何将测试方法添加到一组Django TestCase派生类?

我有一组测试用例,所有测试用例应完全相同,方法是"方法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,但我想理解为什么它不起作用.

python django unit-testing subclassing

13
推荐指数
2
解决办法
3270
查看次数

C++子类化访问修饰符?

我是C++新手,我有很多关于OO语言的经验,比如C/C#/ Objective-C.现在,我正在学习C++.

我看到了这个C++代码:

    class World : public State
    {
    };
Run Code Online (Sandbox Code Playgroud)

似乎WorldState公开继承了这个类.公共子类化?这很难理解.

这个功能的概念是什么?什么时候有用或需要?

c++ inheritance access-modifiers subclassing

13
推荐指数
2
解决办法
6542
查看次数

什么是子类?

我是java新手,我正在尝试创建一个XML文档并一遍又一遍地克隆该文档的特定节点(减去textnode).有人回答我并说我应该继承节点并覆盖克隆.所以我的问题是什么是子类?

java xml clone subclassing

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

为什么Apple不允许UINavigationController的子类化?我对子类化的替代方法是什么?

我目前正在建设一个选项卡式iPhone应用程序,其中每个选项卡的视图控制器是一个实例UINavigationController,并且其中每一个的每个子控制器UINavigationController实例是一个实例UITableViewController.理想情况下,我想子类化,UINavigationController以便每个选项卡的控制器是UINavigationController的子类(UINavigationController显然,除了具有所有标准功能外)还充当与其子控制器关联的每个表视图的数据源和委托. .试图这样做似乎打破UINavigationController了子类中的基本功能.

看到苹果公司在他们的iPhone文档中说一个人不应该是子类UINavigationController,而且当一个人做的时候事情似乎就会破裂,我想知道如何在UINavigationController's不进行子类化的情况下扩展功能,一般来说,如何解决子类化限制时的问题.做可可开发.

谢谢!

iphone cocoa-touch subclass uikit subclassing

12
推荐指数
3
解决办法
9462
查看次数

子类化NSMutableDictionary

我试图实现一个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已经这样做了.

iphone objective-c subclassing nsmutabledictionary ios

12
推荐指数
1
解决办法
9743
查看次数

Objective-C子类化基础知识,如何添加自定义属性;

我有一个问题子类MKPolygon.

我想添加一个简单的int tag属性,但我不断获取MKPolygon的实例而不是我的自定义类,因此调用setTag:会导致异常.

问题是MKPolygons是使用类方法创建的:polygonWithCoordinates: count:我不知道如何将其转换为我的类的实例(包括标记属性).

您如何向MKPolygon添加标签属性?

谢谢!

iphone objective-c subclassing ipad ios

11
推荐指数
2
解决办法
3070
查看次数

在C++中,覆盖现有的虚函数会破坏ABI吗?

我的库有两个类,一个基类和一个派生类.在库的当前版本中,基类具有虚函数foo(),派生类不会覆盖它.在下一个版本中,我希望派生类可以覆盖它.这会破坏ABI吗?我知道引入一个新的虚函数通常会,但这似乎是一个特例.我的直觉是它应该改变vtbl中的偏移量,而不是实际改变表的大小.

显然,由于C++标准没有强制要求特定的ABI,这个问题在某种程度上是特定于平台的,但实际上,在大多数编译器中,断开和维护ABI是类似的.我对GCC的行为感兴趣,但是人们可以回答的编译器越多,这个问题就越有用;)

c++ virtual-functions backwards-compatibility abi subclassing

11
推荐指数
2
解决办法
1280
查看次数

在python中创建一个默认列表

我正在尝试创建一个非常有用的列表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)

python list subclassing

11
推荐指数
2
解决办法
6256
查看次数

如何在Swift中继承自定义UIViewController?

我想创建一个可重用的视图控制器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 …

inheritance view uiviewcontroller subclassing swift

11
推荐指数
2
解决办法
6483
查看次数