我有一个问题,我已经找到解决方法,但是我想了解为什么它不起作用-因为这对我来说毫无意义。这是一个演示我的问题的最小示例:
import XCTest
import CoreLocation
class ExampleTests: XCTestCase {
var okay: ext!
// this test works fine
func testOkay(){
okay = ext()
XCTAssertNotNil(okay)
}
// this test crashes with EXC_BAD_ACCESS(code=1, address=0x10)
func testNotOkay(){
let notOkay: ext
notOkay = ext()
XCTAssertNotNil(notOkay)
}
}
extension ExampleTests {
class ext : CLPlacemark{
}
}
Run Code Online (Sandbox Code Playgroud)
我正在看一本书,以开发一个简单的TodoList应用程序,该应用程序使用CoreLocation对地址进行地理编码。作为测试的一部分,我必须创建一个模拟CLPlacemark对象以测试地理编码功能。
在这本书中,我被告知我必须为此模拟程序声明一个变量作为Test类的属性,因为否则“由于在其定义范围之外访问了地标,因此测试会崩溃”。
可以在上面的示例中看到。testOkay()正常工作,因为它okay被声明为类属性。由于出现错误而testNotOkay()崩溃EXC_BAD_ACCESS,因为我尝试实例化ext该函数中的新实例。
现在,如果我不扩展CLPlacemark,问题就解决了-即我可以ext在函数中声明类型类型的变量,或者在类的属性中声明类型,而没有问题。
这里发生了什么?我看不出为什么第二个示例在第一个示例工作时会崩溃。在我的实际代码中,仅在一个或两个函数中使用我的模拟地标实例作为类属性时,将它们声明为类属性似乎很轻而易举。肯定有一些我不了解Swift的问题导致了这个问题。
谢谢!!
我编写C++已经有一段时间了,我对这个代码示例有一些问题:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
string* data;
int current = 0;
void init(){
data = new string[6];
data[0] = "7 4 3";
data[1] = "8 11 12 16 17 18 20";
data[2] = "17 16 20 2 20 5 13";
data[3] = "17 8 8 16 12 15 13";
data[4] = "12 4 16 4 15 7 6";
data[5] = "8 14 2 11 17 12 8";
}
string getNext() {
if(current == …Run Code Online (Sandbox Code Playgroud)