小编Bry*_*hen的帖子

符合协议的Swift泛型类型不能用于引用协议吗?

import UIKit

protocol Identifiable
{
}

protocol Storage
{
    func test() -> Data<Identifiable>
}

class DiskStorage<T where T:Identifiable, T:NSCoding>:Storage
{
    func test() -> Data<Identifiable>
    {
       return Data<T>() //error: T is not identical to Identifiable
    }
}

class Data<T where T:Identifiable>
{

}
Run Code Online (Sandbox Code Playgroud)

我认为可以使用符合协议的泛型类型来调用引用相同协议的方法.怎么施展呢?几乎尝试了一切,没有任何工作.也许我理解错了......

对这一个人有什么帮助吗?非常感谢

generics protocols swift

7
推荐指数
1
解决办法
4094
查看次数

iOS - 如何检查NSOperation是否在NSOperationQueue中?

来自文档:

操作对象一次最多只能有一个操作队列,如果操作已经在另一个队列中,则此方法抛出NSInvalidArgumentException异常.同样,如果操作当前正在执行或已经完成执行,则此方法抛出NSInvalidArgumentException异常.

那么如何检查我是否可以安全地将NSOperation添加到队列中?

我知道的唯一方法是添加操作,然后尝试捕获异常,如果操作已经在队列中或之前执行过.

iphone objective-c nsoperation nsoperationqueue ios

6
推荐指数
1
解决办法
1万
查看次数

NSData的行为initWithBytesNoCopy:length:freeWhenDone:

我想要一个修复长度可变内容共享数据缓冲区,这是我如何创建它:

void *buffer = malloc(length);
// initialize buffer content
NSData *sharedData = [[NSData alloc] initWithBytesNoCopy:buffer length:length freeWhenDone:YES]
Run Code Online (Sandbox Code Playgroud)

如果我buffer从中创建NSData后进行修改会发生什么?NSData会反映我做的改变buffer吗?

sharedData当我想修改时,我可以保证不会得到dealloc buffer.

这就是我实际想要使用它的方式:


void *my_alloc(CFIndex allocSize, CFOptionFlags hint, void *info) {return NULL;}
void my_dealloc(void *ptr, void *info) {
    mach_vm_deallocate(mach_task_self(), (mach_vm_address_t)ptr, (size_t)info);
}
Run Code Online (Sandbox Code Playgroud)
size_t length = //some number
mach_vm_address_t buffer;
mach_vm_allocate(mach_task_self(), &buffer, length, VM_FLAGS_ANYWHERE);
// do something to buffer, for example pass to other process using mach RPC and expect other process will modify the content
CFAllocatorContext …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsdata

6
推荐指数
1
解决办法
2738
查看次数

使用swig for C#时的TypeInitializationException

我正在为ac#项目使用C++框架并使用swig连接它们.

TypeInitializationException每次我尝试创建C++对象包装器时都会抛出问题.

C#代码

TRPoint p = new TRPoint();
Run Code Online (Sandbox Code Playgroud)

其中TRPoint是C++结构

typedef struct {
    float x, y;
} TRPoint;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

细节:

在此输入图像描述

我有一个vc项目,将c ++代码构建到DLL文件中,但我不知道如何正确链接它.

c# c++ swig

6
推荐指数
1
解决办法
1391
查看次数

iOS5将.xib分配给自定义UIView类

HI有一个自定义视图类,使用以下代码加载并放置在我的主视图中.之所以我想用不同的内容填充它,而不是每次在代码中构建一个视图,如果我创建一个自定义类,我可以在循环等中重复使用它,我得到这个在代码中工作得很好,即铺设出按钮标签等

但是,如果我创建一个新的用户界面视图,而不是手动编写代码,那么在该视图上可视化地构建我的文本字段,标签和按钮.

然后将其连接到我的自定义类.

这是我遇到问题的地方,如何连接这个视图xib文件,以便在放入我的代码时它变得可见.我已将xib文件中的自定义类属性分配给我的自定义文件,但我还缺少什么?

.h文件:

 #import <UIKit/UIKit.h>

 @interface blogView : UIView

 @end
Run Code Online (Sandbox Code Playgroud)

.m文件:

 #import "blogView.h"

 @implementation blogView

 - (id)init
 {
     self = [super initWithFrame:CGRectMake(0, 0, 478, 220)];
     if (self != nil)
     {
         NSLog(@"Blog View loaded");

         self.backgroundColor = [UIColor yellowColor];

         UILabel *titleLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 400, 40)];
         [titleLbl setText:@"This is the Title"];

         [self addSubview:titleLbl];

     }
     return self;
 }

 @end
Run Code Online (Sandbox Code Playgroud)

我的xib文件名为blogView.xib,它是一个View用户界面.

在我的主视图控制器和我有的ViewDidLoad中

  blogView *blogItem = [[blogView alloc]init];
  [self.view addSubview:blogItem];
Run Code Online (Sandbox Code Playgroud)

当我运行这一切都工作正常,但我想链接到.xib文件,以节省时间等谢谢

objective-c uiview ios ios5

6
推荐指数
1
解决办法
7046
查看次数

在Swift中动画化视图

我一直试图使用swift使用弹簧动画为UIView制作动画.当我使用目标C时,我能够实现它,但是我在swift中遇到错误.这是动画:

UIView.animateWithDuration(3,
usingSpringWithDamping: 0.3,
initialSpringVelocity: 3.0,
animations:{
viewToAnimate.frame.offset(dx: 0, dy: 100.0)},
completion: nil)
Run Code Online (Sandbox Code Playgroud)

编译器给我一个错误说

Could not find an overload for 'animateWithDuration' that accepts supplied arguments. 
Run Code Online (Sandbox Code Playgroud)

如果我删除"usingSpringWithDamping:0.3,initialSpringVelocity:3.0",它编译和动画很好.如何快速制作弹簧动画?

swift xcode6 ios8

6
推荐指数
2
解决办法
1万
查看次数

Swift - Tinder效果

如何在Swift中实现Tinder效果?

我的意思是,我有一个图像,如果我向右滑动并且如果我向左滑动则拒绝接受.

我可以用下面的代码来做:

@IBAction func SwipeRight(sender: UISwipeGestureRecognizer) {
    UIView.animateWithDuration(1) {
        self.Imagem.center = CGPointMake(self.Imagem.center.x - 150, self.Imagem.center.y )
    }
    //other things after acception
}
Run Code Online (Sandbox Code Playgroud)

@IBAction func SwipeLeft(sender: UISwipeGestureRecognizer) {
    UIView.animateWithDuration(1) {
        self.Imagem.center = CGPointMake(self.Imagem.center.x + 150, self.Imagem.center.y )
    }
    //other things after rejection
}
Run Code Online (Sandbox Code Playgroud)

但这样用户无法取消操作.我希望如果用户从边缘(左侧或右侧)滑动到三角形距离,则会出现一个图像,让用户现在可以看到,如果他结束了移动,则会发生动作.否则,用户可以在不结束移动的情况下返回到大于delta的距离,并且动作将被取消.

cocoa-touch ios swift

6
推荐指数
1
解决办法
4589
查看次数

[Card]类型的不可变值仅具有名称附加的变异值

我有一个Card类和一个Player类.

在我的Player类中,我有一个函数,它接受一个[Card]数组并添加一个Card.

但是,当我打电话给...

myCardArray.append(myCard)
Run Code Online (Sandbox Code Playgroud)

......我收到了错误

Immutable value of type [Card] only has mutating values of name append
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么会这样?为什么这是不可改变的?

swift

6
推荐指数
1
解决办法
3040
查看次数

Swift NSSet和CoreData

我正在尝试将一个客观的C&CoreData应用程序移动到Swift和iOS,并通过迭代NSSet对象来打砖墙:

Xcode生成了这些类:

class Response: NSManagedObject {
    @NSManaged var responseText: String
    @NSManaged var score: NSNumber
    @NSManaged var answers: NSSet
    @NSManaged var question: Question
}

class Question: NSManagedObject {
    @NSManaged var questionText: String
    @NSManaged var questionType: String
    @NSManaged var qualifier: Qualifier
    @NSManaged var responses: NSSet
}
Run Code Online (Sandbox Code Playgroud)

然后在第3课我要添加一个需要迭代NSSet的方法..

class Answer: NSManagedObject {

    @NSManaged var evaluation: Evaluation
    @NSManaged var response: Response

    func scoreGap() -> Int {
        var max = 0
        for aresponse in self.response.question.responses {

            // this next line throws an error
            var scoreVal …
Run Code Online (Sandbox Code Playgroud)

core-data nsset ios swift

6
推荐指数
1
解决办法
7784
查看次数

Google Drive Picker:选择根文件夹

我需要允许用户选择哪个 Google Drive 文件夹来上传他们的文件。

我现在正在使用此代码:

view = new google.picker.DocsView(google.picker.ViewId.FOLDERS).
  setParent('root').
  setSelectFolderEnabled(true)

picker = new google.picker.PickerBuilder().
  addView(view).
  setSelectableMimeTypes('application/vnd.google-apps.folder').
  enableFeature(google.picker.Feature.NAV_HIDDEN).
  setOAuthToken(token).
  setDeveloperKey(key).
  setAppId(appid).
  setCallback(picker_callback).
  build()
Run Code Online (Sandbox Code Playgroud)

但是这里有几个问题:

  1. 尽管google.picker.ViewId.FOLDERS使用了文件,但用户仍然可以看到文件
  2. 没有办法选择根文件夹

有什么办法可以解决我的问题吗?

目前文件总是上传到根文件夹,我不希望这个新功能消除这种可能性。

javascript google-drive-api google-picker

6
推荐指数
1
解决办法
1696
查看次数