在过去的24小时内,我尝试使用两个不同的第三方Swift库:Swiftz和Sleipnir.我认为它应该相当容易,因为这两个项目只是简单地提供了如何使用它们的草图.但是,两者都没有为我提供足够的细节.我已经尝试了以下所有方法:将项目添加到我的工作区,将已编译的框架拖放到我的项目导航器中,将框架添加到"Link Binary with Libraries"阶段.在所有情况下,我都收到链接器错误,通知我无法找到框架.
我只需要一个实际文档的链接来解释如何执行此操作.我找不到它.
编辑:忘掉第三方图书馆了.你如何消费自己的图书馆?我有一个我编写的Cocoa Framework库.现在我已将命令行项目添加到同一工作区.如果我可以从命令行应用程序访问我的新框架,那肯定会很好.我点击了我的命令行项目.单击Build Phases并将我的自定义框架拖到Link Binary with Libraries部分.一切都很好.运行我的应用程序时,我收到以下错误:
dyld: Library not loaded: @rpath/libswiftAppKit.dylib
Referenced from: /Users/mgwelch/Library/Developer/Xcode/DerivedData/SwiftParsing-
btkaoklayoffujgrkklfyffpipih/Build/Products/Debug/Parsing.framework/Versions/A/
Parsing
Reason: image not foundI
Run Code Online (Sandbox Code Playgroud) 更新3/23/2016我刚刚测试了下面的原始示例代码,它在XCode 7.3中编译得很好.看起来像XCTAssertNil一直在更新以获取类型的表达式() throws -> Any?
因此可能不再需要这个问题和答案(除了旧版本的编译器一段时间.)
我正在使用XCTest在XCode中编写我的第一个单元测试.我不确定如何利用XCTAssertNil,因为它似乎只在使用某些类型时编译.它似乎可以使用由类和内置基元构成的选项,但不适用于结构.如何使用这种方法呢?
对于结构,编译器会给出以下错误(假设'SimpleStruct'是您的类型的名称):
'SimpleStruct' is not identical to 'AnyObject'
Run Code Online (Sandbox Code Playgroud)
这是一个简单的测试类,用于说明一些编译好的类型和其他不编译的类型.
import Cocoa
import XCTest
struct SimpleStruct {
}
class SimpleClass {
}
class Tests: XCTestCase {
func testl() {
var simpleStruct:SimpleStruct? = nil;
var simpleClass:SimpleClass? = nil;
var i:Int? = nil;
var s:String? = nil;
var tuple:(Int,String)? = nil;
XCTAssertNil(simpleStruct); // compile error
XCTAssertNil(simpleClass); // OK
XCTAssertNil(i); // OK
XCTAssertNil(s); // OK
XCTAssertNil(tuple); // compile error
}
}
Run Code Online (Sandbox Code Playgroud) 我的问题是重复的
然而,虽然原作者发现答案有帮助,但我仍然输了.这个问题有两个单独的引用,这些引用都不足以帮助我(一个完整的初学者KVC
和RestKit
).
这里有一个参考,给出了这个示例代码
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];
Run Code Online (Sandbox Code Playgroud)
无论什么课程应该是什么?应该是NSString吗?或者这是否意味着我应该创建一个包含一个属性为NSArray*的包装类?
什么是@"someAttribute"应该是什么?同样,这是否意味着一个包装类,在这种情况下,someAttribute将是我的包装类上属性的名称,即NSArray*?
另一个参考是在这里,虽然它显示从数组提取到"包装类",但包装类只有一个NSNumber,而不是一个数组.因此,不清楚如何将该示例转换为适用于获取整个数组的示例.
作为参考,服务器返回一个字符串数组,就像原始问题一样:["string1","string2","string3"].
UPDATE
这是我尝试过的代码.我已经创建了一个包装类.
@interface CannedResponse : NSObject
@property (strong, nonatomic) NSString * response;
@end
Run Code Online (Sandbox Code Playgroud)
这是映射:
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[CannedResponse class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"response"]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodGET pathPattern:RESPONSES_API_PATH keyPath:nil statusCodes:nil;
Run Code Online (Sandbox Code Playgroud)
我正在打电话 getObjectsAtPathForRouteName
我得到的是一系列CannedReponses
预期的.但是,而不是NSString
被放入响应属性.我得到了一个RKMappingSourceObject
.现在RKMappingSourceObject
确实包含正确的字符串.
我将通过RestKit
控制台中的日志记录查看是否可以收集更多线索.
更新#2
如前所述 …
我有一个名为 parentRows 的字符串列表,其中包含如下所示的字符串:
"176,c-4454"
"177,c-34324"
Run Code Online (Sandbox Code Playgroud)
我曾经.split(',')
把它们放在一个string[]
var arr = parentRow.Split(',');
Run Code Online (Sandbox Code Playgroud)
因为基本上我想要的是,当我遍历列表时,如果用户输入匹配arr[1]
,那么我想转换arr[0]
为 anint
并将其存储在用户信息中。
代码片段:
"176,c-4454"
"177,c-34324"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经尝试过了, int asInt = arr[0].Select(s => int.Parse(s));
但我只是得到了错误
"Error CS1503 Argument 1: cannot convert from 'char' to 'System.ReadOnlySpan<char>"
一个人将如何去实现我想要的?
先感谢您!