Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 多重继承问题_Ios_Swift_Inheritance_Uiviewcontroller - Fatal编程技术网

Ios 多重继承问题

Ios 多重继承问题,ios,swift,inheritance,uiviewcontroller,Ios,Swift,Inheritance,Uiviewcontroller,我在Swift中遇到多重继承问题,这是我的情况: 在我的应用程序中,我有各种UITableViewController和UIViewController,但它们都必须有各种字段,例如一个数组和两个字符串。 出于这个原因,我想创建一个超类'SuperClassTest',并从中继承所有UITableViewController和UIViewController,如下所示: class SuperClassTest { var stringOne:String? var strin

我在Swift中遇到多重继承问题,这是我的情况:

在我的应用程序中,我有各种
UITableViewController
UIViewController
,但它们都必须有各种字段,例如一个数组和两个字符串。 出于这个原因,我想创建一个超类
'SuperClassTest'
,并从中继承所有
UITableViewController
UIViewController
,如下所示:

class SuperClassTest {

    var stringOne:String?
    var stringTwo:String?
}
我的问题是,例如,当我创建一个必须具有这些字段的
UIViewController
时,它不能从
SuperClassTest
继承,因为它已经从
UIViewController
类继承


如何解决此问题?

Swift和Objective-C仅为单一继承,一个类不能有多个超类


当您看到Swift代码在其声明中包含多个超类时,您将看到,声明中最多有一个名称是超类,其他名称是协议名称。

Swift和Objective-C仅为单一继承,一个类不能有多个超类

当您看到Swift代码在其声明中包含多个超类时,您最多会看到,声明中的一个名称是超类,其他名称是协议名称。

您将“超类”添加为协议:

Protocol SuperProtocolTest {

    var stringOne:String?
    var stringTwo:String?
}
然后,您可以使用协议作为您想要遵守的类的必要蓝图:

Class MyController : UITableViewController, SuperProtocolTest { 
    ...
}
据说Swift是面向协议编程(POP)的语言,而不是OOP。你不能有多重继承,但是你可以让你的一个类符合你想要的任何协议,例如

Class MyController : UITableViewController, SuperProtocolTest, UITextFieldDelegate, ... { 
    ...
}
您将“超类”添加为协议:

Protocol SuperProtocolTest {

    var stringOne:String?
    var stringTwo:String?
}
然后,您可以使用协议作为您想要遵守的类的必要蓝图:

Class MyController : UITableViewController, SuperProtocolTest { 
    ...
}
据说Swift是面向协议编程(POP)的语言,而不是OOP。你不能有多重继承,但是你可以让你的一个类符合你想要的任何协议,例如

Class MyController : UITableViewController, SuperProtocolTest, UITextFieldDelegate, ... { 
    ...
}

如前所述:您只能继承一个类,但可以根据需要遵守任意多个协议

显而易见的解决方案是创建一个包含所有必需变量的协议,并遵守该协议:

protocol ImportantPropertiesToHave {
    var stringOne : String? { get }
    var stringTwo : String? { get set }
}

class MyClass : UIViewController, ImportantPropertiesToHave {
    let stringOne : String? = "hi"
    var stringTwo : String? = nil
}
您必须在协议中指定它是只读变量还是读写变量。然后,您在实现中定义的变量必须至少符合该标准


如果协议至少是
get
,那么您的实现可以选择将其作为公共变量。但是,如果协议希望将其设置为
get set
,那么您的实现不能使用
let
,而是必须使用
var

,正如前面所说的:您只能继承一个类,但可以根据需要遵循任意多的协议

显而易见的解决方案是创建一个包含所有必需变量的协议,并遵守该协议:

protocol ImportantPropertiesToHave {
    var stringOne : String? { get }
    var stringTwo : String? { get set }
}

class MyClass : UIViewController, ImportantPropertiesToHave {
    let stringOne : String? = "hi"
    var stringTwo : String? = nil
}
您必须在协议中指定它是只读变量还是读写变量。然后,您在实现中定义的变量必须至少符合该标准


如果协议至少是
get
,那么您的实现可以选择将其作为公共变量。但是,如果协议希望它是
get set
,那么您的实现不能使用
let
,而必须使用
var

,您不能在目标C和Swift中实现多重继承。但您可以通过多级继承来实现这一点

class SuperClassViewController : UIViewController
{
    var stringOne:String?
    var stringTwo:String?
}

class YourViewController : SuperClassViewController
{
}

不能在Objective C和Swift中实现多重继承。但您可以通过多级继承来实现这一点

class SuperClassViewController : UIViewController
{
    var stringOne:String?
    var stringTwo:String?
}

class YourViewController : SuperClassViewController
{
}

我知道,我的问题是如何解决我的问题无法使用多重继承我知道,我的问题是如何解决我的问题无法使用多重继承你的问题标题非常误导。Swift不支持多重继承。。。而且
UITableViewController
继承自
UIViewController
。@SahebRoy它在什么方面有误导性?当Swift不支持多重继承时,“多重继承问题Swift”。这不是误导吗?不,这是OP的一个明显错误,我们可以很容易地解决。问题是他想要“多重继承”,但他自己却不知道如何实现这一点。你的问题标题非常误导人。Swift不支持多重继承。。。而且
UITableViewController
继承自
UIViewController
。@SahebRoy它在什么方面有误导性?当Swift不支持多重继承时,“多重继承问题Swift”。这不是误导吗?不,这是OP的一个明显错误,我们可以很容易地解决。问题是他想要“多重继承”,但他自己却不知道如何实现。我的问题是,我有很多类必须有这些字段,例如uiviewcontroller、uitableviewcontroller和其他。这样,我必须为每个类替换这些字段。我的问题是,我有很多类必须有这些字段,例如uiviewcontroller、uitableviewcontroller和其他。这样,我必须为每个类替换这些字段