我正在编写一个静态库,它依赖于其他库(在我的例子中是SBJSON和ASIHTTPRequest).
如果我编译这些外部依赖关系到我的库,然后我并不能拒绝那些在编译这些类其他库.由于我的目标是建立一套对我公司静态库,可以导入到任何新的应用程序,这些编译依赖于库显然不是一种选择.
有没有人有任何建议/最佳实践来创建具有共同依赖关系的共享静态库套件?
仅供参考:Swift bug在这里提出:https://bugs.swift.org/browse/SR-3871
我有一个奇怪的问题,演员表不能正常工作,但控制台显示它是正确的类型.
我有一个公共协议
public protocol MyProtocol { }
Run Code Online (Sandbox Code Playgroud)
我在一个模块中实现它,使用返回实例的公共方法.
internal struct MyStruct: MyProtocol { }
public func make() -> MyProtocol { return MyStruct() }
Run Code Online (Sandbox Code Playgroud)
然后,在我的视图控制器中,我触发一个带有该对象的segue作为发送者
let myStruct = make()
self.performSegue(withIdentifier: "Bob", sender: myStruct)
Run Code Online (Sandbox Code Playgroud)
到目前为止都很好.
问题出在我的prepare(for:sender:)方法中.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Bob" {
if let instance = sender as? MyProtocol {
print("Yay")
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,实例转换为MyProtocol始终返回nil.
当我po sender as! MyProtocol在控制台中运行时,它给了我错误Could not cast value of …
我正在尝试将文件加载到字符串中.这是我正在使用的代码:
NSError *error = nil;
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename
ofType:@"html"];
NSString *text = [NSString stringWithContentsOfFile:fullPath
encoding:NSUTF8StringEncoding
error:&error];
Run Code Online (Sandbox Code Playgroud)
当传入@"about"作为文件名时,它工作得非常好,显示代码有效.当传入@"eula"作为文件名时,它以"Cocoa error 258"失败,转换为NSFileReadInvalidFileNameError.但是,如果我交换文件的内容但保持名称相同,则另一个文件无法证明文件名没有任何问题,这与内容有关.
about文件是相当简单的HTML,但eula文件是由法律部门从Word导出的大量混乱.
有没有人知道HTML文件中可能导致引发此错误的任何内容?
非常感谢,
山姆
我有一个服务,它在Future中返回一个Option [ProductDoc](作为akka问)
我如何回应喷涂路线,以便有效的产品代表产品但是未知但形成良好的产品会返回404?
我希望代码填补这里的空白:
get {
path("products" / PathElement) { productID:String =>
val productFuture = (productService ? ProductService.Get(productID)).mapTo[Option[ProductDoc]]
// THE CODE THAT GOES HERE SO THAT
// IF PRODUCT.ISDEFINED RETURN PRODUCT ELSE REJECT
}
}
Run Code Online (Sandbox Code Playgroud)
我可以上班的唯一方法就是这种可憎的行为:
get {
path(PathElement) { productID:String =>
val productFuture = (productService ? ProductService.Get(productID)).mapTo[Option[ProductDoc]]
provide(productFuture).unwrapFuture.hflatMap {
case x => provide(x)
} { hResponse:shapeless.::[Option[ProductDoc], HNil] =>
hResponse.head match {
case Some(product) => complete(product)
case None => reject
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这肯定不是实现这一目标的正确方法吗?这似乎是一个非常简单的模式,必须已经被某人解决了!
我是这样使用的@EnvironmentObject:
struct MyView: View {
@EnvironmentObject var object: MyObject
...
}
Run Code Online (Sandbox Code Playgroud)
但我的代码不需要为object.
只是使这个可选不起作用(甚至不编译 - Property type 'MyObject?' does not match that of the 'wrappedValue' property of its wrapper type 'EnvironmentObject')
您也不能传入默认对象(这也可以解决我的问题) - 作为属性的初始值,或作为@EnvironmentObject. ei 这些不起作用:
@EnvironmentObject var object: MyObject = MyObject()
@EnvironmentObject(MyObject()) var object: MyObject
Run Code Online (Sandbox Code Playgroud)
我试图将 包装@EnvironmentObject在我自己的属性包装器中,但这根本不起作用。
我也试过包装对 object 属性的访问,但它不会抛出一个可以被捕获的异常,它会抛出一个fatalError.
有什么我遗漏的吗,或者我只是在尝试不可能的事情?
当我在设备上测试我的应用程序(iPhone4)时,我正在制作一个我面临问题的游戏,它的背景不起作用.就像背景图像结束时BLACKISH BACKGROUND COLOR来了.我的背景图片大小为460X2880,图片名称为"mars_sample.jpg"(适用于iPhone4)背景移动的代码为:
-(void)backgroundmoving:(ccTime)dt
{
static float bk_f=0.0f;
bk_f -=0.9;
if (bk_f <= -960*3) {bk_f=0;}
background.position = ccp( 0,bk_f);
}
Run Code Online (Sandbox Code Playgroud)
当我将"460X2880"尺寸图像加载为背景图像时,它不会在背景中加载,如果它像大小"460X1192"那样,它会在背景中加载图像,但在屏幕顶部显示BLACKISH BACKGROUND Color.
下面一个CODE用于设置背景图像:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
background = [CCSprite spriteWithFile:@"staripad.png"];
background.anchorPoint= ccp(0,0);
[self addChild:background z:0];
} else {
background = [CCSprite spriteWithFile:@"mars_sample.jpg"];
background.anchorPoint= ccp(0,0);
[self addChild:background z:0];
[self schedule:@selector(backgroundmoving:) interval:1/30];
}
Run Code Online (Sandbox Code Playgroud)
请给我一些建议,它将如何运作.谢谢大家
问候,
Tauseef Khan
我已经设法在Xcode 4中为我的库设置单元测试.我已经使用我知道将通过和失败的测试执行构建(即STAssertTrue(YES)和STAssertTrue(NO))以确保它正常工作.我正在使用本文档后面的默认Apple SenTest库.
但是,当我的测试运行时,我在构建日志中收到此错误:
处理命令输出时发生内部错误: - [IDEActivityLogSectionRecorder endMarker]:发送到实例0x20310b580的无法识别的选择器
要清楚,它根本不会影响测试的运行,只会影响构建窗口的输出.每次都运行所有测试,所以我可以通过查看构建成功或失败来判断通过/失败.
但是,当我的测试失败时,我无法找出哪一个失败,因为输出似乎在达到该错误时停止.
有没有人有单元测试经验/ Xcode 4 /这个错误?
我正在尝试为我正在努力的网站的心愿单部分完成一个宁静的网址结构.这是一个非常简单的模型,用户可以拥有许多愿望清单,每个愿望清单可以包含许多产品.
目前我有明显的CRUD URL来操纵心愿单本身:
GET account/wishlists.json
GET account/wishlists/{id}.json
POST account/wishlists.json?name=My%20Wishlist
POST account/wishlists/{id}.json?name=My%20New%20Name
DELETE account/wishlists/{id}.json
Run Code Online (Sandbox Code Playgroud)
但是,我不认为我知道如何构建将产品添加/删除到愿望清单的URL :(
以下是我目前的选择:
1)让产品作为URL的一部分添加,并使用HTTP动词来定义我的动作
POST account/wishlist/{id}/product/{product_id}.json
DELETE account/wishlist/{id}/product/{product_id}.json
Run Code Online (Sandbox Code Playgroud)
要么
2)将操作作为URL的一部分,将产品ID作为有效负载的一部分
POST account/wishlist/{id}/add.json?product_id={product_id}
POST account/wishlist/{id}/remove.json?product_id={product_id}
Run Code Online (Sandbox Code Playgroud)
(1)很干净,据我所知,它非常漂亮但不允许轻松添加多个产品等.
我也有点担心使用DELETE动词 - 我没有删除产品或心愿单,我只是从另一个删除.
(2)更明确但更偏离REST - 我不会只是引用url中的资源,我将指的是对该资源的操作:(
关于上述哪一项更正确的任何建议都会非常有帮助!(如果有第三个选项比我的更好,请随意纠正我!)
编辑:这在Swift 3中运行得非常好,我们现在都应该使用它们:)
如果我有两个协议,X并且Y在其中Y实现X,为什么我不能Y为具有类型的变量分配数组[X]?
更奇怪的是,我可以将它逐个转换为X数组,并且编译得很好.
protocol X { }
protocol Y: X { }
// Make a test array of Y
extension String: Y { }
let a: [Y] = [ "Hello" ]
// Make it into an array of X - this works absolutely fine
let b: [X] = [ a[0] as X ]
// Why won't this cast work?
let c: [X] = a as [X]
Run Code Online (Sandbox Code Playgroud)
我认为,鉴于Y做了X可以做的所有事情,这个任务应该没问题(是的,我丢失了一些类型信息,但它至少应该编译!) …
我有一个模型类型,如下所示:
enum State {
case loading
case loaded([String])
case failed(Error)
var strings: [String]? {
switch self {
case .loaded(let strings): return strings
default: return nil
}
}
}
class MyApi: ObservableObject {
private(set) var state: State = .loading
func fetch() {
... some time later ...
self.state = .loaded(["Hello", "World"])
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试用它来驱动 SwiftUI 视图。
struct WordListView: View {
@EnvironmentObject var api: MyApi
var body: some View {
ZStack {
List($api.state.strings) {
Text($0)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正是在这里,我的假设失败了。List我试图获取加载时要在 …