Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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 每当我试图创建一个特定类的实例时,整个应用程序都会崩溃(EXC_BAD_ACCESS)_Ios_Swift_Initialization_Infinite Loop - Fatal编程技术网

Ios 每当我试图创建一个特定类的实例时,整个应用程序都会崩溃(EXC_BAD_ACCESS)

Ios 每当我试图创建一个特定类的实例时,整个应用程序都会崩溃(EXC_BAD_ACCESS),ios,swift,initialization,infinite-loop,Ios,Swift,Initialization,Infinite Loop,我的代码似乎由于无限循环而崩溃,但我找不到错误。 有人能帮我查一下密码吗 这是我的控制器: override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { for touch in touches{ let location = touch.location(in: self.view) let x = Float(location.x) l

我的代码似乎由于无限循环而崩溃,但我找不到错误。 有人能帮我查一下密码吗

这是我的控制器:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches{
        let location = touch.location(in: self.view)
        let x = Float(location.x)
        let y = Float(location.y)
        let newTouch = Touch(latitude: x,longitude: y)
        TouchService().addTouch(touch: newTouch, grid: _grid)
    }
}
import Foundation

class Touch {

    var _lat: Float
    var _long: Float
    var _startingPoint: Touch

    init(latitude lat: Float, longitude long: Float){
        self._lat = lat
        self._long = long
        self._startingPoint = Touch(latitude: lat, longitude: long)
    }
}
我想我使用init()函数的方式有问题

提前致以亲切的问候和感谢,
Chris

这就是您的代码的工作方式

class Touch {

var _lat: Float
var _long: Float
var _startingPoint: Touch

init(latitude lat: Float, longitude long: Float){
    self._lat = lat
    self._long = long
    self._startingPoint = Touch(latitude: lat, longitude: long) // It invokes recursively your Touch class with no end, so it causes infinite loop
   }
}
解决方案

您必须为
起始点

问题创建不同的类 初始值设定项创建一个无限循环

//Touch(latitude: lat, longitude: long) calls the initializer again.
//Since you are inside the initializer, it creates an infinite loop.  
self._startingPoint = Touch(latitude: lat, longitude: long)
评论一下,你就会明白


解决方案 为您的值(组合)创建单独的类或结构


根据你的需要调整一下

为什么我必须删除“self.”标记?@Fukuan
self。
只有当相应的参数是完全相同的名称时,才需要初始值设定项中的@Fukuan
。否则,这通常是一种风格选择。另外,你的应用程序失败是因为你在初始化器中调用初始化器,而不是因为
self。
Ah,我明白了。我把它们都拿走了,现在一切正常。谢谢你的帮助:但这是斯威夫特。带前导下划线的属性是不酷的。
class AngularLocation {
    var _lat: Float
    var _long: Float
class Touch {
    var destination: AngularLocation
    var startingPoint: AngularLocation