小编Ben*_*ero的帖子

为什么表情符号在Swift字符串中被如此奇怪地处理?

角色(有两个女人,一个女孩和一个男孩的家庭)编码如下:

U+1F469 WOMAN,
?U+200D ZWJ,
U+1F469 WOMAN,
U+200D ZWJ,
U+1F467 GIRL,
U+200D ZWJ,
U+1F466 BOY

所以它非常有趣地编码; 单元测试的完美目标.然而,斯威夫特似乎不知道如何对待它.这就是我的意思:

"???".contains("???") // true
"???".contains("") // false
"???".contains("\u{200D}") // false
"???".contains("") // false
"???".contains("") // true
Run Code Online (Sandbox Code Playgroud)

所以,斯威夫特说它包含自己(好)和一个男孩(好!).但它说它不包含女人,女孩或零宽度木匠.这里发生了什么事?斯威夫特为什么知道它包含一个男孩而不是女人或女孩?我能理解它是否将它视为一个单一的角色并且只识别它包含它自己,但事实上它有一个子组件,没有其他人困惑我.

如果我使用类似的东西,这不会改变"".characters.first!.


更令人困惑的是:

let manual = "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}"
Array(manual.characters) // ["?", "?", "?", ""]
Run Code Online (Sandbox Code Playgroud)

即使我将ZWJ放在那里,它们也不会反映在字符数组中.接下来是一个小小的说法:

manual.contains("") // false
manual.contains("") // false
manual.contains("") // true
Run Code Online (Sandbox Code Playgroud)

所以我得到了与字符数组相同的行为...这是非常烦人的,因为我知道数组的样子.

如果我使用类似的东西,这也不会改变"".characters.first!.

string unicode emoji swift

524
推荐指数
5
解决办法
3万
查看次数

如何在swift中定义类中的静态常量

我在我的功能中有这些定义

class MyClass {
    func myFunc() {
        let testStr = "test"
        let testStrLen = countElements(testStr)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将'testStr'和'testStrLen'移动到类级别,它将无法编译.它说'MyClass.Type没有名为'testStr'的成员.

class MyClass {
    let testStr = "test"
    let testStrLen = countElements(testStr)

    func myFunc() {

    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我不想每次都计算一次不断的"测试".

根据我对以下评论的理解,我需要这样做:

class MyClass {
    let testStr = "test"
    let testStrLen = countElements("test")

    func myFunc() {

    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法我不需要输入/输入"test"两次?谢谢.

swift

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

自动属性合成(@property)和继承

使用XCode 5.1,会出现一个新警告.它让我明白 - 显然 -我做错了什么.

我们的想法是拥有一个对象(一个模型),它是从原始类继承的可变版本.这样的想法是要打开的是一个性质readonly,以readwrite

@interface Car : NSObject
    @property (strong, readonly) NSString *name;
@end

@interface MutableCar : Car
    @property (strong, readwrite) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)

这些需要在单独的文件中(如两个普通类).

它给出了这个警告:

Auto property synthesis will not synthesize property 'name' because it is 'readwrite' but it will be synthesized 'readonly' via another property
Run Code Online (Sandbox Code Playgroud)

所以我想知道什么是正确的解决方案来做类似的事情,如果它甚至可能的话.如果需要编写访问器并避免使用自动合成等.请准确,并用文档或其他任何方式支持您的答案.

warnings properties objective-c ios xcode5.1

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

使用嵌套文件夹迭代文件夹中的文件 - Cocoa

我需要访问文件夹中的每个文件,包括嵌套文件夹中存在的文件.示例文件夹可能如下所示.

animals/
 -k.txt
 -d.jpg
 cat/
   -r.txt
   -z.jpg
   tiger/
      -a.jpg
      -p.pdf
 dog/
   -n.txt
   -f.jpg
 -p.pdf
Run Code Online (Sandbox Code Playgroud)

假设我想在不是文件夹的"动物"中的每个文件上运行一个进程.迭代文件夹"animals"及其所有子文件夹访问每个文件的最佳方法是什么?

谢谢.

directory iteration macos cocoa

41
推荐指数
3
解决办法
4万
查看次数

如何从UIAlertView迁移(在iOS8中已弃用)

我目前在我的一个应用程序中有以下代码行.这很简单UIAlertView.但是,从iOS 8开始,现在不推荐使用它:

let alertView = UIAlertView(title: "Oops!", message: "This feature isn't available right now", delegate: self, cancelButtonTitle: "OK")
Run Code Online (Sandbox Code Playgroud)

如何更新此功能以使用iOS 8+?我相信我必须改变一些东西UIAlertCotroller,虽然我不太清楚是什么.

xcode ios swift xcode7 swift2

30
推荐指数
2
解决办法
4万
查看次数

在iPhone的警报视图

我是iPhone应用程序开发的新手.我想用2个按钮设计一个警报视图:OKCancel.当用户触摸OK按钮时,我将打印出一条消息hello.当他们触摸Cancel按钮时,我会打印出来cancel.

请帮忙; 我该怎么做呢?

iphone cocoa-touch objective-c

25
推荐指数
3
解决办法
7万
查看次数

什么是永不归类?

什么是一个func与返回类型Never呢?

例如:

func addNums() -> Never {

    //my code

}
Run Code Online (Sandbox Code Playgroud)

如果我Void像这样保留返回类型会有什么区别?

func addNums() -> Void {

    //my code

}
Run Code Online (Sandbox Code Playgroud)

假设我想处理fatalError(如dpassage所说); 以下代码就足够了:

print("its an error")
return
Run Code Online (Sandbox Code Playgroud)

Apple文档说:

不正常返回的函数的返回类型,即没有值的类型.

资料来源:开发商

这不是一个重复的问题,在Swift何时以及如何使用@noreturn属性?,我希望得到更详细的答案,需要以下细节:

  1. 关于两者NeverVoid返回类型之间差异的实际例子

  2. 我们应该采用这些回报类型的条件.

  3. 返回类型也有可能为零; 我也需要对这个功能进行比较

答案应该集中在差异上.

types swift

25
推荐指数
4
解决办法
3618
查看次数

如何在UIView可见时收到通知?

有没有办法获得通知,回调或其他方法来调用方法,只要UIView变得对用户可见,即当UIScrollview是某些UIViews的超级视图时,这样的UIView的ViewController将得到通知它的视图现在对用户可见了吗?

我知道可能的,但不是那么优雅的解决方案,检查ScrollView滚动的位置(通过UIScrollViewDelegate方法)并计算其中一个子视图是否可见...
但我正在寻找更通用的方式这样做.

cocoa-touch uiscrollview uiview

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

如何在NSOpenPanel中将"打开"更改为"选择"?

在我的应用程序中我需要显示选择文件对话框,我正在使用允许选择文件的NSOpenPanel,代码如下所示,

- (IBAction)sendFileButtonAction:(id)sender{

    NSOpenPanel* openDlg = [NSOpenPanel openPanel];

    // Enable the selection of files in the dialog.
    [openDlg setCanChooseFiles:YES];

    // Enable the selection of directories in the dialog.
    [openDlg setCanChooseDirectories:YES];

    // Display the dialog.  If the OK button was pressed,
    // process the files.
    if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton )
    {
        // Get an array containing the full filenames of all
        // files and directories selected.
        NSArray* files = [openDlg filenames];

        // Loop through all the files and …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c++ nsopenpanel

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

检测UISwitch中的更改

这听起来微不足道,但我注意到一些奇怪.我为UISwitch的Value Changed事件连接了一个处理程序.我期望的是每次调用处理程序时,开关的值都会改变.但是,这其实并不总是如此.如果您快速打开/关闭开关,则可以使用交换机的SAME状态连续调用处理程序(在我的特定应用程序中,这是一个问题).所以我想知道是否有其他人注意到这种行为,并找到了一个很好的解决方案.

cocoa-touch uiswitch ios

20
推荐指数
5
解决办法
3万
查看次数