Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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 我班上有两个内班,我可以';swift中的初始化类_Ios_Swift - Fatal编程技术网

Ios 我班上有两个内班,我可以';swift中的初始化类

Ios 我班上有两个内班,我可以';swift中的初始化类,ios,swift,Ios,Swift,我不能初始化内部类。IDE me返回错误,即在初始化所有存储属性之前使用了“self”。我附加的图片,其中看错误是确定的 编译器是正确的,您试图在初始化所有存储属性之前将self传递给Customer的构造函数,因为在初始化会话对象之前,会话不会初始化,但这需要自我——您的两个需求是相互排斥的 您可能需要重新思考您的架构;如果没有其他内容,则从Customer到Session的引用与从Session到Customer的引用相结合,将为您提供一个保留周期和内存泄漏 如果您想使用当前架构,最好将会话

我不能初始化内部类。IDE me返回错误,即在初始化所有存储属性之前使用了“self”。我附加的图片,其中看错误是确定的

编译器是正确的,您试图在初始化所有存储属性之前将
self
传递给
Customer
的构造函数,因为在初始化
会话
对象之前,
会话
不会初始化,但这需要
自我
——您的两个需求是相互排斥的

您可能需要重新思考您的架构;如果没有其他内容,则从
Customer
Session
的引用与从
Session
Customer
的引用相结合,将为您提供一个保留周期和内存泄漏

如果您想使用当前架构,最好将
会话
客户
属性设置为弱可选,以避免初始化问题和保留周期

class Customer {
    let session: Session
    let auth: Auth

    init() {
        self.auth = Auth()
        self.session = Session()
        session.customer = self
    }

    class Session {
        weak var customer: Customer?
    }
} 
您可以将
customer
设为隐式展开选项,以避免每次引用时都需要显式展开,但如果
customer
被释放或未设置,则有崩溃的风险:

class Session {
    weak var customer: Customer!
 }

就风格而言,Swift属性和变量应该以小写字母开头,并使用驼峰大小写,因此
auth
session
userID
,而不是
auth
session
userID
不能创建递归结构化类

  • 初始化外部类需要内部类
  • 初始化内部类需要外部类
类外部类{
类内部类{
让外面的驴:外面的驴
初始化(外部类:外部类){
self.outerClass=outerClass
}
}
让innerClass:innerClass
init(){
self.innerClass=内部类(外部类:self)
}
}

请将您的问题包含为文本的相关代码-图像无法复制到答案中,对搜索引擎也不友好。就风格而言,Swift属性和变量应该以小写字母开头,并使用驼峰大小写,因此
auth
session
userID
,而不是
auth
session
USER\u ID
self尚未初始化。只有在所有存储属性初始化并创建强引用循环并使其中一个弱引用循环之前,才能使用它