小编Ear*_*rey的帖子

是否有将Array转换为Dictionary的声明方法?

我想从这个字符串数组中获取

let entries = ["x=5", "y=7", "z=10"]
Run Code Online (Sandbox Code Playgroud)

对此

let keyValuePairs = ["x" : "5", "y" : "7", "z" : "10"]
Run Code Online (Sandbox Code Playgroud)

我试图使用,map但问题似乎是字典中的键值对不是一个独特的类型,它只是在我的脑海中,但不是在字典类型,所以我无法真正提供转换函数,因为有什么都没有改变.再加上map一个阵列,所以不行.

有任何想法吗?

declarative swift

31
推荐指数
3
解决办法
2万
查看次数

目标C中的位掩码

我想学点掩盖.据我所知,这是将某种类型的二进制值存储到一个变量中的方法.

如果上述假设成立,我认为我可以这样做:

typedef NSUInteger Traits;

enum
{
    TraitsCharacterHonest       = 0,
    TraitsCharacterOptimistic   = 1,
    TraitsCharacterPolite       = 4,
    TraitsCharacterDevious      = 8,
    TraitsPhysicalTall          = 16,
    TraitsPhysicalBeautiful     = 32,
    TraitsPhysicalFat           = 64,
    TraitsPhysicalBigEyes       = 128,
    TraitsPhysicalRedHair       = 256, 
};

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (strong, nonatomic) NSString  *name;
@property (assign, nonatomic) Traits    *traits;

@end
Run Code Online (Sandbox Code Playgroud)

问题1是,如何为一个人分配更多特征?

问题2是,我是否必须将不断增加的数字用于枚举项目,或者有没有办法表明这一点?

最终我希望实现这样的目标:

Person *john = [[Person alloc] init];

//here code that assigns john three traits: TraitsCharacterHonest,      
//TraitsCharacterOptimistic and TraitsPhysicalBeautiful.
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,价值

john.traits应该是100011.,从右边和每个地方读取代表特定枚举值/特征......和0表示没有它,1表示拥有它.

您能否就语法提出建议并在必要时解释特定方面?

bit-manipulation objective-c ios

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

userInteractionEnabled = YES时如何将触摸事件传递给superview?

我有以下设置.

+- XXXCustomControl : UIControl -------+
| A                                    |
|   +- ContentView -------------------+|
|   |                                 ||
|   |  B                              ||
|   |                                 ||
|   +---------------------------------+|
+--------------------------------------+ 
Run Code Online (Sandbox Code Playgroud)

一个XXXCustomControl,它是UIControl的子类.它包含一个名为contentView的子视图,其类型为UIView,其大小小于Control的区域.该视图具有.userInteractionEnabled = YES;

我需要将该属性设置为YES,因为水平滚动视图会偶尔放入其中,并且它们需要可滚动.如果超级视图(在我们的案例中,内容视图不允许用户交互,则会继承子视图.)但同时,当XXXCustomControl在其内容视图中不包含滚动视图时,不仅需要在区域A中而且还包含滚动视图.在B区

所以我在这里有一个"利益冲突"因为我要么

1)将内容视图设置为userInteractionEnabled = NO,然后我可以在A和B中的内容视图区域中点击空控件,但是我将放在那里的滚动视图将不可滚动.

2)将内容视图设置为userInteractionEnabled = YES但是,如果Control为空,我只能点击区域A来触发触摸事件.

我想出的一个想法是我默认将属性设置为NO,当我填充contentView时,我将其设置为yes.当我清除contentView时,我将属性设置为no.基本上我希望它一直设置为yes,当它为空时,强制contentView将touchUpInside事件传递给它的superview.

这可能吗?

cocoa-touch objective-c ios swift

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

如何在ImageIO iOS框架中升级图像?

我经历了逐步发现iOS中性能最佳的图像大小调整解决方案的常规过程,最终我得到了ImageIO.

以下效果很好

if let currentImage = CGImageSourceCreateWithData(imageData, nil)

   //...some code that extracts the existing size, and based on my maximum expected horizontal size..calculates a new horizontal/vertical maximum size..

let options: CFDictionary = [kCGImageSourceThumbnailMaxPixelSize as NSString            : maximumImageWidthOrHeight,
                             kCGImageSourceCreateThumbnailFromImageAlways as NSString   : true]

CGImageSourceCreateThumbnailAtIndex(image, options)
Run Code Online (Sandbox Code Playgroud)

但仅适用于下采样.

如果我的图像是全高清即.1920 x 1080,它被调整大小(保持纵横比),使其适合320 px horizo​​ntaly,因为这是我设置为最大水平尺寸.

但是,如果我传入一个16像素×9像素的图像..一个非常小的图像(显然具有16:9的宽高比).此图像未调整大小.

我想将它调整为320 x 180像素.

是否有一个选项组合/一个错过的方法调用/任何会在imageIO框架中给我的东西?

ios swift

13
推荐指数
2
解决办法
2174
查看次数

从一个类别单元测试私有方法?

我在类上有一个NSString包含私有帮助器方法的类别.如果我可以在单元测试中使用这种方法,那将会很方便.但是我很难揭露它.当我在NSString上创建类扩展并在此声明方法时,该方法在单元测试中不可见.如果我在单独的头文件中创建类扩展,或者作为单元测试.m文件的一部分,则无关紧要.

看起来我在这里遗漏了一些东西.

有帮助吗?

cocoa-touch unit-testing objective-c ios

8
推荐指数
2
解决办法
3609
查看次数

在NSMutableArray中观察计数

我希望在计数时得到通知,即.NSArray中的项目数量发生了变化..当然我不需要这个,如果我控制添加和删除数组中的对象.但我不是,它在业务流程模型方面无法预测,并且取决于外部因素.有一些简单优雅的解决方案吗?

编辑:我当然正在纠正这个NSMutableArray ..

objective-c nsarray ios

7
推荐指数
2
解决办法
8119
查看次数

Objective C协议循环依赖?

我在自己的头文件中有一个protocolA,用作接口.然后我有两个具体的类,它们是该协议的不同实现.

现在,在我的ViewController中,我使用它来声明一个id类型的属性,它允许我在没有VC知道任何相关信息的情况下交换实现.

我还有protocolB,它用于从这两个实现对象到VC的委托调用.

问题是我有循环依赖.

在协议A中,我需要声明类型为id的"delegate"属性.在协议B中,委托方法正在向调用者发送引用,调用者是id类型的对象...

有更好的设计吗?


更新示例,也许对其他人有帮助.

ProtocolA标头:

#import <Foundation/Foundation.h>

 /*!
 Abstract interface for any Provider 
 */

@protocol DataProviderDatasource <NSObject>

@required
@property (nonatomic) id <DataProviderDelegate> delegate; 
-(void)update;

@end
Run Code Online (Sandbox Code Playgroud)

ProtocolB标头

#import <Foundation/Foundation.h>
#import "DataProviderDatasource.h"
/*!
 Protocol that each  Data Provider implements to make delegate calls to notify its     delegate about data management operations.
 */

@protocol DataProviderDelegate <NSObject>

-(void)dataProviderWillUpdate:(id<DataProviderDatasource>)dataProvider;
-(void)dataProviderdidUpdate:(id<DataProviderDatasource>)dataProvider;
Run Code Online (Sandbox Code Playgroud)

@结束

protocols interface objective-c ios

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

如何使用autolayout将UIView分成相等的部分?

我正在努力寻找一个逻辑规则或约束,这将允许我将UIView的内容分成相等的部分.

更具体一点,想象一下初始宽度为300pt的UIView.然后让我们放置三个子视图并进行设置,使每个子视图的宽度实际为100,而origin.x将为0,100和200.一个子视图将构成superview的三分之一.如果我调整超级视图的大小,所有三个子视图将水平变宽,但它们将保持相同的大小.

有帮助吗?

objective-c uiview ios autolayout

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

使用关联值映射swift枚举

假设我们有一个带有相关值类型的枚举.在下面的示例中,两个值类型是包含图像的简单对象和要共享的URL.

enum Content {
  case Image(ShareableImage)
  case Video(ShareableVideo)
}
Run Code Online (Sandbox Code Playgroud)

现在让我们来看一系列视频和图像案例.

let media: [Content] = [*a lot of enum cases inside here*]  
Run Code Online (Sandbox Code Playgroud)

到目前为止,上面的所有代码都无法在代码库中以任何方式进行更改,我需要使用它.


这开始我的问题:

让我们用媒体过滤数组,只对图像情况进行过滤

    let imageOnlyCases: [Content] = media.filter { item -> Bool in

        switch item {
        case .Image: return true
        default: return false
        }
    }
Run Code Online (Sandbox Code Playgroud)

下一步,我想从枚举数组获取其关联值的数组

[Content] -> [ShareableImage] by using map.
Run Code Online (Sandbox Code Playgroud)

所以我这样做

    let shareablemages = imageOnlyCases.map { imageCase -> ShareableImage in

        switch imageCase {

        case .Image(let image): return image
        default: return  WHAT TO DO HERE?
        }
    }
Run Code Online (Sandbox Code Playgroud)

你看,我有一个返回类型的问题..我知道枚举案例都是.Image …

arrays enums swift

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

TableHeaderView没有响应触摸

我有一个UIView的自定义子类,在IB中设计,包含一些标签和一个按钮.按钮上有touchUpInside事件的操作,目标是自定义视图.

我将此自定义视图附加到我的UI中的tableview的self.tableView.tableHeaderView.

奇怪的是这个自定义视图没有响应触摸.我可以很好地看到表视图中所有标签和按钮,这意味着表视图处理并正确显示它,但它没有响应触摸.我检查了整个视图层次结构,所涉及的所有视图都将userInteractionEnabled设置为YES.如果我将其他一些控件拖到该自定义视图中,例如一个开关,分段控件......它们也不会响应.就像自定义视图中的这些控件没有注册触摸一样.

它没有任何意义.我没有想法.你能帮忙让按钮上的触摸事件到达其父视图吗?

objective-c ios

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