如何阻止用户在Swift 3中写入诅咒单词?

问题描述:

我使用斯威夫特3火力创建一个社交应用,用户可以使职位,但事情是,我不希望用户使用骂人的话如何阻止用户在Swift 3中写入诅咒单词?

有没有办法像取代这些词当用户写他们?
目前用户使用文本视图写他们想发布的东西...

我怎样才能做到这一点像最简单,最简单的方法是什么?

我在找答案,我发现这个问题Swift: how to censor/filter text entered for swear words, etc?
这个答案代码:

import Foundation 

func containsSwearWord(text: String, swearWords: [String]) -> Bool { 
return swearWords 
    .reduce(false) { $0 || text.contains($1.lowercased()) } 
} 

// example usage 
let listOfSwearWords = ["darn", "crap", "newb"] 
    /* list as lower case */ 

let userEnteredText1 = "This darn didelo thread is a no no." 
let userEnteredText2 = "This fine didelo thread is a go." 

print(containsSwearWord(text: userEnteredText1, swearWords: listOfSwearWords)) // true 
print(containsSwearWord(text: userEnteredText2, swearWords: listOfSwearWords)) // false 

但我真的不明白这一点。我如何在我的项目中实现?我应该在哪里粘贴该代码?或者我如何将该代码链接到我的文本视图?它在代码中缺少的东西应该是什么?

如果在.editingChanged事件上使用UITextField。

inputTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) 

func textFieldDidChange(_ textField: UITextField) { 
     print(containsSwearWord(text: textField, swearWords: listOfSwearWords)) // Here you check every text change on input UITextField 
} 

UPDATE

输入端

之前在textViewShouldEndEditing(_ textView: UITextView)验证用户输入您必须实现UITextViewDelegateOfficial Documentation

验证并返回true/false来允许编辑结束。

输入端

textViewDidEndEditing(_ textView: UITextView)验证用户输入并显示任何警告,如果您发现不准的话验证了。

+0

但是,如果我使用一个UITextView会发生什么?我仍然不明白! 谢谢。 – killerwar557

+0

我已经更新了我对UITextView用法的回答。 – sergiog90

这就是我该怎么做的。

  • 通行证的TextView文字的NSString
  • 转换的NSString的NSArray
  • 检查,看看是否能NSArray中包含你的诅咒字符串之一。如果确实如此,那就用****或其他东西代替它。

这就是它在Objective-C中的样子。

NSString *textViewStr = myTextView.text; 
NSArray *myArray1 = [textViewStr componentsSeparatedByString:@" "]; //this will put all words separated by space into an array 
if ([myArray1 containsObject:@"crap"]) { 
    //found one 
    textViewStr = [textViewStr stringByReplacingOccurrencesOfString:@"crap" 
            withString:@"duck"]; 
} 

虽然使用谷歌搜索,我发现了另一个更好的答案。

//If you want multiple string replacement: 
NSString *s = @"foo/bar:baz.foo"; 
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."]; 
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; 
NSLog(@"%@", s); // => foobarbazfoo 

String replacement in Objective-C