質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1951閲覧

Swift stringByTrimmingCharactersInSet の書き換え

murakmixi

総合スコア26

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/02/14 00:52

前提・実現したいこと

Swiftを学習していて、ファイルをダウンロードし、起動する際にエラーが多発してしまい、原因はswift2で書かれているためでしてので、Swift4に書き換えているのですが、stringByTrimmingCharactersInSet(下記のコードの(1)の部分)という書き換えがどうしてもできずお力を借りれたらと思います。

発生している問題・エラーメッセージ

Expected expression in list of expressions Variable binding in a condition requires an initializer

該当のソースコード

Swift

1import UIKit 2 3typealias ActionButtonItemAction = (ActionButtonItem) -> Void 4 5public class ActionButtonItem: NSObject { 6 7var action: ActionButtonItemAction? 8var view: UIView! 9var text: String { 10 get { 11 return self.label.text! 12 } 13 14 set { 15 self.label.text = newValue 16 } 17} 18 19private var label: UILabel! 20private var button: UIButton! 21private var image: UIImage! 22private var labelBackground: UIView! 23private let viewSize = CGSize(width: 200, height: 35) 24private let buttonSize = CGSize(width: 35, height: 35) 25private let backgroundInset = CGSize(width: 10, height: 10) 26 27public init(title optionalTitle: String?, image: UIImage?) { 28 super.init() 29 30 self.view = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: self.viewSize)) 31 self.view.alpha = 0 32 self.view.isUserInteractionEnabled = true 33 self.view.backgroundColor = UIColor.clear 34 35 self.button = UIButton(type: .custom) as UIButton 36 self.button.frame = CGRect(origin: CGPoint(x: self.viewSize.width - self.buttonSize.width, y: 0), size: buttonSize) 37 self.button.layer.shadowOpacity = 1 38 self.button.layer.shadowRadius = 2 39 self.button.layer.shadowOffset = CGSize(width: 1, height: 1) 40 self.button.layer.shadowColor = UIColor.gray.cgColor 41 self.button.addTarget(self, action: Selector(("buttonPressed:")), for: .touchUpInside) 42 43 if let unwrappedImage = image { 44 self.button.setImage(unwrappedImage, for: .normal) 45 } 46 47 (1)if let text = optionalTitle where text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).isEmpty == false { 48 self.label = UILabel() 49 self.label.font = UIFont(name: "HelveticaNeue-Medium", size: 13) 50 self.label.textColor = UIColor.darkGrayColor() 51 self.label.textAlignment = .Right 52 self.label.text = text 53 self.label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: Selector("labelTapped:"))) 54 self.label.sizeToFit() 55 56 self.labelBackground = UIView() 57 self.labelBackground.frame = self.label.frame 58 self.labelBackground.backgroundColor = UIColor.whiteColor() 59 self.labelBackground.layer.cornerRadius = 3 60 self.labelBackground.layer.shadowOpacity = 0.8 61 self.labelBackground.layer.shadowOffset = CGSize(width: 0, height: 1) 62 self.labelBackground.layer.shadowRadius = 0.2 63 self.labelBackground.layer.shadowColor = UIColor.lightGrayColor().CGColor 64 65 // Adjust the label's background inset 66 self.labelBackground.frame.size.width = self.label.frame.size.width + backgroundInset.width 67 self.labelBackground.frame.size.height = self.label.frame.size.height + backgroundInset.height 68 self.label.frame.origin.x = self.label.frame.origin.x + backgroundInset.width / 2 69 self.label.frame.origin.y = self.label.frame.origin.y + backgroundInset.height / 2 70 71 // Adjust label's background position 72 self.labelBackground.frame.origin.x = CGFloat(130 - self.label.frame.size.width) 73 self.labelBackground.center.y = self.view.center.y 74 self.labelBackground.addSubview(self.label) 75 76 // Add Tap Gestures Recognizer 77 let tap = UITapGestureRecognizer(target: self, action: Selector("labelTapped:")) 78 self.view.addGestureRecognizer(tap) 79 80 self.view.addSubview(self.labelBackground) 81 } 82 83 self.view.addSubview(self.button) 84} 85 86// MARK: - Button Action Methods 87 88func buttonPressed(sender: UIButton) { 89 if let unwrappedAction = self.action { 90 unwrappedAction(self) 91 }

試したこと

一応、
if let text = optionalTitle,
case text.trimmingCharacters(in characterSet.whitespace).isEmpty == false
のように書き換えてみたのですがエラーが多発し、治らなかったのでご存知の方いましたらお教えください。

補足情報(FW/ツールのバージョンなど)

開発環境は、
Xcode Version 10.1
Swift version 4.2.1
です!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2019/02/14 00:58

何で勉強しているのか知りませんが、Swift2で書かれたもので勉強するのはやめたほうがいいと思います。こんな質問をしている時間が無駄です。自分で解決できる(しようとする)のであれば、それはそれで勉強になりますが。
murakmixi

2019/02/14 03:24

SNSの開発の教材をUdemyで学習しているのですが、Swift2系でしか学べなかったので学習したのですが、同内容をSwift4で学習できるように探してみます。 ありがとうございます。
guest

回答1

0

ベストアンサー

fuzzballさんもおっしゃっている通り、可能であればSwift4系の資料を見て勉強された方がよいです。

今回の場合で言えば、trimmingCharacters(in:)への置き換えと、whereをカンマへ変える事でSwift4系でコンパイルが通るようになります。

swift:

1let optionalTitle: String? = " hoge hoge " 2if let text = optionalTitle, text.trimmingCharacters(in: CharacterSet.whitespaces).isEmpty == false { 3 print(text) // " hoge hoge " 4}

投稿2019/02/14 01:33

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murakmixi

2019/02/14 03:22

ありがとうございます! 同様の内容を学習できるSwift4系の教材を探してみます。 アドバイスありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問