有人可以解释为什么以下代码将无法编译(格式奇怪,使其更容易看到问题):
ListView ^ listview = gcnew ListView();
listview->Items->AddRange( gcnew array<ListViewItem^> {
gcnew ListViewItem( gcnew array<String^> { L"red", L"fish" } ),
gcnew ListViewItem( gcnew array<String^> { L"green", L"eggs" } )
});
Run Code Online (Sandbox Code Playgroud)
这给出了编译错误
错误C2440:'初始化':无法从'const wchar_t [4]'转换为'System :: Windows :: Forms :: ListViewItem ^'
如果代码分为两行,如下所示,那么一切都很好:
ListView^ listview = gcnew ListView();
ListViewItem^ lvi1 = gcnew ListViewItem( gcnew array<String^> { L"red", L"fish" } );
ListViewItem^ lvi2 = gcnew ListViewItem( gcnew array<String^> { L"green", L"eggs" } );
listview->Items->AddRange( gcnew array<ListViewItem^> {
lvi1,
lvi2
});
Run Code Online (Sandbox Code Playgroud)
忽略为什么有人想制作一个单片的单行来填充ListView,为什么编译器在原始代码中设置ListViewItems有困难,以及如何编写这样的单行程序?
很多人都提出了类似的问题,但是回答要么只是模糊不清,要么不是我需要去的方向,所以我会尝试尽可能具体地问这个问题.此问题的上下文适用于使用XCode 4进行iOS开发.
我有一个应用程序,我多次使用相同的Widget.在这个简单的练习中,小部件将是一个固定大小的红色框,顶部有一个标签,根视图控制器将改变,但你可以想象它有很多ImageViews和ScrollViews,看起来很漂亮.最后一点是关键,因为非编码艺术设计师希望能够全局调整此视图,而无需在UI的每个重复部分上反复执行相同的操作.
在应用程序中,我已经用单个UIView替换了用于组成窗口小部件的ImageViews和ScrollViews,并使用InterfaceBuilder将自定义类设置为Widget.我在根视图控制器中有这些Widget对象正确连接的插座.Widget类是UIView的子类,代码如下:
@interface Widget : UIView {
UILabel *label;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
@property (nonatomic, copy) NSString *labelName;
@end
@implementation Widget
@synthesize label, labelName;
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
// This is the code that I want to disappear
CGRect pos = CGRectMake(5, 5, 90, 30);
label = [[UILabel alloc] initWithFrame:pos];
[self addSubview:label];
self.backgroundColor = [UIColor redColor];
}
return self;
}
- (NSString *)labelName {
return label.text;
} …Run Code Online (Sandbox Code Playgroud)