我想从这个字符串数组中获取
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一个阵列,所以不行.
有任何想法吗?
我想学点掩盖.据我所知,这是将某种类型的二进制值存储到一个变量中的方法.
如果上述假设成立,我认为我可以这样做:
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表示拥有它.
您能否就语法提出建议并在必要时解释特定方面?
我有以下设置.
+- 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.
这可能吗?
我经历了逐步发现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 horizontaly,因为这是我设置为最大水平尺寸.
但是,如果我传入一个16像素×9像素的图像..一个非常小的图像(显然具有16:9的宽高比).此图像未调整大小.
我想将它调整为320 x 180像素.
是否有一个选项组合/一个错过的方法调用/任何会在imageIO框架中给我的东西?
我在类上有一个NSString包含私有帮助器方法的类别.如果我可以在单元测试中使用这种方法,那将会很方便.但是我很难揭露它.当我在NSString上创建类扩展并在此声明方法时,该方法在单元测试中不可见.如果我在单独的头文件中创建类扩展,或者作为单元测试.m文件的一部分,则无关紧要.
看起来我在这里遗漏了一些东西.
有帮助吗?
我希望在计数时得到通知,即.NSArray中的项目数量发生了变化..当然我不需要这个,如果我控制添加和删除数组中的对象.但我不是,它在业务流程模型方面无法预测,并且取决于外部因素.有一些简单优雅的解决方案吗?
编辑:我当然正在纠正这个NSMutableArray ..
我在自己的头文件中有一个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)
@结束
我正在努力寻找一个逻辑规则或约束,这将允许我将UIView的内容分成相等的部分.
更具体一点,想象一下初始宽度为300pt的UIView.然后让我们放置三个子视图并进行设置,使每个子视图的宽度实际为100,而origin.x将为0,100和200.一个子视图将构成superview的三分之一.如果我调整超级视图的大小,所有三个子视图将水平变宽,但它们将保持相同的大小.
有帮助吗?
假设我们有一个带有相关值类型的枚举.在下面的示例中,两个值类型是包含图像的简单对象和要共享的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 …
我有一个UIView的自定义子类,在IB中设计,包含一些标签和一个按钮.按钮上有touchUpInside事件的操作,目标是自定义视图.
我将此自定义视图附加到我的UI中的tableview的self.tableView.tableHeaderView.
奇怪的是这个自定义视图没有响应触摸.我可以很好地看到表视图中所有标签和按钮,这意味着表视图处理并正确显示它,但它没有响应触摸.我检查了整个视图层次结构,所涉及的所有视图都将userInteractionEnabled设置为YES.如果我将其他一些控件拖到该自定义视图中,例如一个开关,分段控件......它们也不会响应.就像自定义视图中的这些控件没有注册触摸一样.
它没有任何意义.我没有想法.你能帮忙让按钮上的触摸事件到达其父视图吗?
ios ×8
objective-c ×7
swift ×4
cocoa-touch ×2
arrays ×1
autolayout ×1
declarative ×1
enums ×1
interface ×1
nsarray ×1
protocols ×1
uiview ×1
unit-testing ×1